I have a server that implements secure communication using OpenSSL. The server does a listen() on a port and keeps track of what listens are secure/SSL listens. When a peer opens to that IP addr/port, the server sees that it's for a secure connection and then makes the calls to set up SSL information for the socket: // error checking and extraneous code removed sock = accept(listen_sock, (struct sockaddr*)&sa_cli, &client_len); SSL_bio = BIO_new(BIO_s_socket()); SSL_obj = SSL_new(SSL_ctx); BIO_set_fd(SSL_bio,sock,BIO_NOCLOSE); SSL_set_bio(SSL_obj, SSL_bio, SSL_bio); SSL_set_verify(SSL_obj,SSL_VERIFY_NONE,verify_callback); SSL_set_accept_state(SSL_obj);
At that point, the server should be waiting for the ClientHello, and will use SSL_read/write to perform the handshake. Let's say the client/peer never sends in the ClientHello. In other words, the client probably called connect() but not SSL_connect() or some similar scenario. Does OpenSSL eventually time out this connection and abort it somehow? Are there OpenSSL API calls the server should be using to ensure it does get timed out? Or is this something the server application should keep track of and handle on it's own? Thanks in advance.