Bug #12126 ยป 0001-openssl-accept-moving-write-buffer-for-write_nonbloc.patch
| ext/openssl/ossl_ssl.c | ||
|---|---|---|
| ossl_sslctx_s_alloc(VALUE klass) | ||
| { | ||
| SSL_CTX *ctx; | ||
| long mode = SSL_MODE_ENABLE_PARTIAL_WRITE; | ||
| long mode = SSL_MODE_ENABLE_PARTIAL_WRITE | | ||
| SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER; | ||
| VALUE obj; | ||
| #ifdef SSL_MODE_RELEASE_BUFFERS | ||
| test/openssl/test_pair.rb | ||
|---|---|---|
| } | ||
| end | ||
| def test_write_nonblock_retry | ||
| ssl_pair {|s1, s2| | ||
| # fill up a socket so we hit EAGAIN | ||
| written = String.new | ||
| n = 0 | ||
| buf = 'a' * 11 | ||
| case ret = s1.write_nonblock(buf, exception: false) | ||
| when :wait_readable then break | ||
| when :wait_writable then break | ||
| when Integer | ||
| written << buf | ||
| n += ret | ||
| exp = buf.bytesize | ||
| if ret != exp | ||
| buf = buf.byteslice(ret, exp - ret) | ||
| end | ||
| end while true | ||
| assert_kind_of Symbol, ret | ||
| # make more space for subsequent write: | ||
| readed = s2.read(n) | ||
| assert_equal written, readed | ||
| # this fails if SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER is missing: | ||
| buf2 = Marshal.load(Marshal.dump(buf)) | ||
| assert_kind_of Integer, s1.write_nonblock(buf2, exception: false) | ||
| } | ||
| end | ||
| def tcp_pair | ||
| host = "127.0.0.1" | ||
| serv = TCPServer.new(host, 0) | ||
| - | ||