Ответ 1
Библиотека OpenSSL дает вам максимальную гибкость с точки зрения решения проблем, связанных с сокетами. SSL_connect
блокируется в вашем случае, потому что вы должны использовать его с блокирующим сокетом. Пожалуйста, используйте его с неблокирующим сокетом, в этом случае он вернется с -1. Если вы вызываете функцию SSL_get_error
которая выдаст SSL_ERROR_WANT_READ
или SSL_ERROR_WANT_WRITE
зависимости от того, когда tcp recv или send не может завершить операцию соответственно.
Когда SSL_ERROR_WANT_WRITE
/SSL_ERROR_WANT_READ
, вы должны вызвать функцию выбора, передав сокету соответствующий fd_set
и тайм-аут. Если время выбора истекло, вы можете считать, что ваш SSL_connect
.
Примечание. SSL_SESSION_set_timeout
используется для установки значений времени ожидания сеанса, связанных с возобновлением SSL. Они не имеют ничего общего с тайм-аутом соединения.
Следующие ссылки должны вам помочь (особенно вторая ссылка, раздел 6, в которой говорится о мультиплексном вводе/выводе):