diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2024-04-22 20:48:40 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2024-04-27 23:59:24 +1200 |
commit | c99d24cee96b775f1d899d70ee49a16d810b2ebb (patch) | |
tree | 056dd5bc98f86f1b87ce7037dfb0d20ded9123b8 | |
parent | 362a69a36f5c437ace2bc9207dcb01d38008198f (diff) | |
download | ruby-openssl-c99d24cee96b775f1d899d70ee49a16d810b2ebb.tar.gz |
Introduce basic support for `close_read` and `close_write`.
-rw-r--r-- | lib/openssl/ssl.rb | 11 | ||||
-rw-r--r-- | test/openssl/test_ssl.rb | 24 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/openssl/ssl.rb b/lib/openssl/ssl.rb index 75a74a3f..0568276a 100644 --- a/lib/openssl/ssl.rb +++ b/lib/openssl/ssl.rb @@ -459,6 +459,17 @@ ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg== nil end + # Close the stream for reading. + def close_read + # Unsupported and ignored. + # Just don't read any more. + end + + # Close the stream for writing. + def close_write + stop + end + private def using_anon_cipher? diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb index 66d63a98..3df391fa 100644 --- a/test/openssl/test_ssl.rb +++ b/test/openssl/test_ssl.rb @@ -117,6 +117,30 @@ class OpenSSL::TestSSL < OpenSSL::SSLTestCase } end + def test_socket_close_write + server_proc = proc do |ctx, ssl| + message = ssl.read + ssl.write(message) + ssl.close_write + ensure + ssl.close + end + + start_server(server_proc: server_proc) do |port| + ctx = OpenSSL::SSL::SSLContext.new + ssl = OpenSSL::SSL::SSLSocket.open("127.0.0.1", port, context: ctx) + ssl.sync_close = true + ssl.connect + + message = "abc"*1024 + ssl.write message + ssl.close_write + assert_equal message, ssl.read + ensure + ssl&.close + end + end + def test_add_certificate ctx_proc = -> ctx { # Unset values set by start_server |