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