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