Я использую соединение ssl, на котором я пишу, используя SSL_write. Если я закрою другой конец этого соединения, SSL_write возвращает число байтов, которые я пишу вместо -1. При следующей записи возвращается -1, но уже слишком поздно, я хотел узнать эту информацию из первого пакета.
Для сервера я использую
openssl s_server -accept 1115 -cert ~/.cert/cert.pem -key ~/.cert/key.pem
Для проверки я отправляю 3 пакета с окном 5 секунд между каждым пакетом. Если я убью s_server перед отправкой второго пакета, SSL_write возвращает положительное число для второго пакета и -1 для третьего. Клиент написан на C. Все приложение более сложное, но в основном я делаю следующее:
/* connection init */
sock = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,1,...);
connect(sock, ...);
ctx = SSL_CTX_new(TLS_client_method());
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3);
ssl = SSL_new(ctx);
SSL_set_fd(ssl, sockfd);
SSL_connect(ssl);
/* and in the write function */
SSL_write(ssl, buffer, len);
Я использую openssl 1.0.2g в Linux Mint 18.3 Sylvia. Есть ли причина, по которой SSL_write не возвращает -1, когда удаленный конец мертв? Моя единственная идея исправить это состояла в том, чтобы включить keepalive, но это не сработало.