From 95aa0ce9e9c1b95f8c92bb7963485ab2b0329ef0 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Sun, 31 Mar 2019 15:06:25 +1300 Subject: [PATCH 1/2] Add `SSLSocket#fileno` and `SSLServer#fileno`. Fixes #198. --- lib/openssl/ssl.rb | 10 ++++++++++ test/test_ssl.rb | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/openssl/ssl.rb b/lib/openssl/ssl.rb index 355eb2ebb..ce826cbe3 100644 --- a/lib/openssl/ssl.rb +++ b/lib/openssl/ssl.rb @@ -354,6 +354,11 @@ class SSLSocket attr_reader :io alias :to_io :io + # The file descriptor for the socket. + def fileno + @io.fileno + end + # The SSLContext object used in this connection. attr_reader :context @@ -464,6 +469,11 @@ def to_io @svr end + # The file descriptor for the server socket. + def fileno + @svr.fileno + end + # See TCPServer#listen for details. def listen(backlog=5) @svr.listen(backlog) diff --git a/test/test_ssl.rb b/test/test_ssl.rb index b8016677d..02841ce01 100644 --- a/test/test_ssl.rb +++ b/test/test_ssl.rb @@ -1544,6 +1544,20 @@ def test_freeze_calls_setup } end + def test_fileno + ctx = OpenSSL::SSL::SSLContext.new + sock1, sock2 = socketpair + + socket = OpenSSL::SSL::SSLSocket.new(sock1) + server = OpenSSL::SSL::SSLServer.new(sock2, ctx) + + assert_equal socket.fileno, socket.to_io.fileno + assert_equal server.fileno, server.to_io.fileno + ensure + sock1.close + sock2.close + end + private def start_server_version(version, ctx_proc = nil, From 8ea628dfac28ab63870900f29d9a788ce5c0129b Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Sun, 31 Mar 2019 15:10:40 +1300 Subject: [PATCH 2/2] Prefer generic implementatio in `SocketForwarder`. --- lib/openssl/ssl.rb | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/openssl/ssl.rb b/lib/openssl/ssl.rb index ce826cbe3..44c737f41 100644 --- a/lib/openssl/ssl.rb +++ b/lib/openssl/ssl.rb @@ -231,6 +231,11 @@ def ssl_version=(meth) end module SocketForwarder + # The file descriptor for the socket. + def fileno + to_io.fileno + end + def addr to_io.addr end @@ -354,11 +359,6 @@ class SSLSocket attr_reader :io alias :to_io :io - # The file descriptor for the socket. - def fileno - @io.fileno - end - # The SSLContext object used in this connection. attr_reader :context @@ -469,11 +469,6 @@ def to_io @svr end - # The file descriptor for the server socket. - def fileno - @svr.fileno - end - # See TCPServer#listen for details. def listen(backlog=5) @svr.listen(backlog)