【问题标题】:openssl ssl_connect blocks forever - how to set timeout?openssl ssl_connect 永远阻塞 - 如何设置超时?
【发布时间】:2012-08-06 20:11:19
【问题描述】:

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

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

【问题讨论】:

    标签: ssl openssl


    【解决方案1】:

    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):

    【讨论】:

    • :(链接资源已移动
    • 以下是这些 PDF 的其他链接:part1part2。希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多