- && (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)
- && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)
- && (csp->cfd != JB_INVALID_SOCKET)
- && (csp->sfd != JB_INVALID_SOCKET)
- && socket_is_still_usable(csp->sfd)
- && (latency < csp->server_connection.keep_alive_timeout);
+ && (((csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)
+ && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED))
+ || (csp->flags & CSP_FLAG_CRUNCHED))
+ && (csp->cfd != JB_INVALID_SOCKET);
+
+ if (continue_chatting && !(csp->flags & CSP_FLAG_CRUNCHED))
+ {
+ continue_chatting = (csp->server_connection.sfd != JB_INVALID_SOCKET)
+ && socket_is_still_alive(csp->server_connection.sfd);
+ if (continue_chatting)
+ {
+ if (!(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET))
+ {
+ csp->server_connection.keep_alive_timeout = csp->config->default_server_timeout;
+ log_error(LOG_LEVEL_CONNECT,
+ "The server didn't specify how long the connection will stay open. "
+ "Assumed timeout is: %u.", csp->server_connection.keep_alive_timeout);
+ }
+ continue_chatting = (latency < csp->server_connection.keep_alive_timeout);
+ }
+ }