openssl ssl_connect永远阻止 - 如何设置超时?

use*_*791 12 ssl openssl

当用openssl编写的服务器没有调用SSL_accept时,客户端的SSL_connect永远阻塞.openssl -SSL_CTX_set_timeout,SSL_SESSION_set_timeout中有一些超时函数,但这些函数对SSL_connect没有影响.

当例如ssl服务器出错并在进行SSL握手之前进入循环时,是否真的没有办法为SSL_connect设置超时?

Jay*_*Jay 12

OpenSSL库为处理套接字相关问题提供了最大的灵活性.在SSL_connect你的情况块,因为你必须使用它与阻塞套接字.请使用非阻塞套接字,在这种情况下,它将以-1返回.如果你调用的SSL_get_error函数会给你SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE错误,这取决于tcp recv或send无法分别完成操作.

SSL_ERROR_WANT_WRITE/ SSL_ERROR_WANT_READ得到,你必须通过到合适的插座调用选择功能fd_set和超时.如果选择超时,您可以考虑您的SSL_connect超时时间.

注:SSL_SESSION_set_timeout用于设置与之连接的SSL会话恢复超时值.它们与超时连接无关.

以下链接应该对您有所帮助(特别是第二节,第6节讨论多路复用I/O):