当用openssl编写的服务器没有调用SSL_accept时,客户端的SSL_connect将永远阻塞。openssl -SSL_CTX_set_timeout、SSL_SESSION_set_timeout中有一些超时函数,但这些函数对SSL_connect没有影响。
当SSL_connect服务器在进行ssl握手之前陷入循环时,是否真的没有为SSL设置超时的方法?
发布于 2012-08-08 10:30:09
OpenSSL库在处理与套接字相关的问题方面提供了最大的灵活性。在您的情况下,SSL_connect阻塞,因为您必须将它与阻塞套接字一起使用。请将其与非阻塞套接字一起使用,在这种情况下,它将返回a -1.如果您调用SSL_get_error函数,这将给您SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE错误,这取决于tcp或send分别无法完成操作。
当获得SSL_ERROR_WANT_WRITE/SSL_ERROR_WANT_READ时,必须通过将套接字传递给适当的fd_set和超时来调用select函数。如果select超时,则可以将SSL_connect视为超时。
注意: SSL_SESSION_set_timeout用于设置会话超时值,这些值链接到SSL恢复。它们与超时连接无关。
下面的链接应该对您有帮助(特别是第二个链接,第6节,其中讨论了多重I/O):
https://stackoverflow.com/questions/11835203
复制相似问题