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) | ||
| -  | ||