2012-08-06 474 views
10

當使用openssl編寫的服務器未調用SSL_accept時,客戶端的SSL_connect塊將永遠保留。 openssl -SSL_CTX_set_timeout,SSL_SESSION_set_timeout中有一些超時函數,但它們對SSL_connect沒有影響。openssl ssl_connect塊永遠 - 如何設置超時?

是否真的沒有辦法爲SSL_connect設置超時,例如, ssl服務器有問題,並在進行SSL握手之前進入循環?

回答

10

OpenSSL Library爲您提供處理套接字相關問題方面的最大靈活性。 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):

+0

:(鏈接資源移動 – 2015-06-18 16:35:55

+0

這裏是這些PDF的一些其他鏈接:[part1](http://vanets.vuse.vanderbilt.edu/dokuwiki/lib/exe/fetch.php?media=resource:part1.pdf)和[part2](http: //vanets.vuse.vanderbilt.edu/dokuwiki/lib/exe/fetch.php?media=resource:part2.pdf)。何這有助於! – Castaglia 2016-01-28 01:01:17