Skip to content

Commit e67135d

Browse files
committed
always set the connection to non-blocking mode
1 parent b62d9a5 commit e67135d

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

ext/openssl/ossl_ssl.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3063,6 +3063,13 @@ ossl_ssl_new_listener(int argc, VALUE *argv, VALUE klass)
30633063

30643064
listener_obj = TypedData_Wrap_Struct(cSSLSocket, &ossl_ssl_type, listener);
30653065
SSL_set_ex_data(listener, ossl_ssl_ex_ptr_idx, (void *)listener_obj);
3066+
#ifdef HAVE_SSL_SET_BLOCKING_MODE
3067+
// Always set non-blocking mode for QUIC connections
3068+
// This is a no-op on non-QUIC connections
3069+
SSL_set_blocking_mode(ssl, 0);
3070+
// This is also a no-op on non-QUIC connections
3071+
SSL_set_default_stream_mode(ssl, SSL_DEFAULT_STREAM_MODE_NONE);
3072+
#endif
30663073

30673074
rb_ivar_set(listener_obj, id_i_io, v_io);
30683075
rb_ivar_set(listener_obj, id_i_context, v_ctx);
@@ -3099,6 +3106,13 @@ ossl_ssl_accept_connection(int argc, VALUE *argv, VALUE self)
30993106

31003107
conn_obj = TypedData_Wrap_Struct(cSSLSocket, &ossl_ssl_type, conn_ssl);
31013108
SSL_set_ex_data(conn_ssl, ossl_ssl_ex_ptr_idx, (void *)conn_obj);
3109+
#ifdef HAVE_SSL_SET_BLOCKING_MODE
3110+
// Always set non-blocking mode for QUIC connections
3111+
// This is a no-op on non-QUIC connections
3112+
SSL_set_blocking_mode(ssl, 0);
3113+
// This is also a no-op on non-QUIC connections
3114+
SSL_set_default_stream_mode(ssl, SSL_DEFAULT_STREAM_MODE_NONE);
3115+
#endif
31023116

31033117
rb_ivar_set(conn_obj, id_i_io, rb_attr_get(self, id_i_io));
31043118
rb_ivar_set(conn_obj, id_i_context, rb_attr_get(self, id_i_context));

0 commit comments

Comments
 (0)