Есть ли функциональная разница между BIO_do_connect
и BIO_do_handshake
?
Оба определены как один и тот же макрос:
/* BIO_s_accept() and BIO_s_connect() */
# define BIO_do_connect(b) BIO_do_handshake(b)
# define BIO_do_accept(b) BIO_do_handshake(b)
# endif /* OPENSSL_NO_SOCK */
# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
Большинство примеров написания вызова клиента TLS BIO_do_handshake
после BIO_do_connect
для инициации рукопожатия SSL и открытия соединения SSL , Но из того, что я видел при анализе сетевого трафика c с помощью Wireshark, BIO_do_connect
выполняет как TCP-рукопожатие, так и TLS-рукопожатие и открывает SSL-соединение.
Вызов BIO_do_handshake
впоследствии не имеет никакого эффекта.
Есть ли какое-либо состояние, в которое конечный автомат переходит после BIO_do_connect
, что требует вызова BIO_do_handshake
?
Является ли это некоторым пережитком предыдущих версий OpenSSL, и для поддержки обратной совместимости необходимы вызовы BIO_do_connect
и BIO_do_handshake
?
Эти вопросы возникли после того, как я задал этот вопрос на SE.