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

时间:2012-08-06 20:11:20

标签: ssl openssl

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

在例如SSL_connect时,是否真的无法设置超时ssl服务器有问题,在进行SSL握手之前进入循环?

1 个答案:

答案 0 :(得分:11)

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并超时来调用select函数。如果选择超时,您可以认为SSL_connect已超时。

注意: SSL_SESSION_set_timeout用于设置与SSL恢复相关联的会话超时值。它们与超时连接无关。

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