Loading lib/connect.c +7 −7 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ int geterrno(void) * Description: * Set the socket to either blocking or non-blocking mode. */ static int nonblock(int socket, /* operate on this */ int Curl_nonblock(int socket, /* operate on this */ int nonblock /* TRUE or FALSE */) { #undef SETBLOCK Loading Loading @@ -389,7 +389,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ continue; /* set socket non-blocking */ nonblock(sockfd, TRUE); Curl_nonblock(sockfd, TRUE); rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen); Loading Loading @@ -450,7 +450,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* now disable the non-blocking mode again */ nonblock(sockfd, FALSE); Curl_nonblock(sockfd, FALSE); if(addr) *addr = ai; /* the address we ended up connected to */ Loading Loading @@ -481,7 +481,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* Convert socket to non-blocking type */ nonblock(sockfd, TRUE); Curl_nonblock(sockfd, TRUE); /* This is the loop that attempts to connect to all IP-addresses we know for the given host. One by one. */ Loading Loading @@ -546,7 +546,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* now disable the non-blocking mode again */ nonblock(sockfd, FALSE); Curl_nonblock(sockfd, FALSE); if(addr) /* this is the address we've connected to */ Loading lib/connect.h +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ * $Id$ *****************************************************************************/ int Curl_nonblock(int socket, /* operate on this */ int nonblock /* TRUE or FALSE */); CURLcode Curl_connecthost(struct connectdata *conn, Curl_addrinfo *host, /* connect to this */ long port, /* connect to this port number */ Loading lib/url.c +21 −2 Original line number Diff line number Diff line Loading @@ -955,8 +955,27 @@ static bool SocketIsDead(struct connectdata *conn, int sock) #ifdef USE_SSLEAY /* the socket seems fine, but is the SSL later fine too? */ if(conn->ssl.use) { if(SSL_get_shutdown(conn->ssl.handle)) return TRUE; /* this connection is dead! */ int peek; int error; Curl_nonblock(sock, TRUE); peek = SSL_peek(conn->ssl.handle, conn->data->state.buffer, BUFSIZE); infof(conn->data, "SSL_peek returned %d\n", peek); if(-1 == peek) { error = SSL_get_error(conn->ssl.handle, peek); infof(conn->data, "SSL_error returned %d\n", error); if(SSL_ERROR_WANT_READ != error) ret_val = TRUE; } else /* peek did not return -1 */ ret_val = TRUE; Curl_nonblock(sock, FALSE); } #endif } Loading Loading
lib/connect.c +7 −7 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ int geterrno(void) * Description: * Set the socket to either blocking or non-blocking mode. */ static int nonblock(int socket, /* operate on this */ int Curl_nonblock(int socket, /* operate on this */ int nonblock /* TRUE or FALSE */) { #undef SETBLOCK Loading Loading @@ -389,7 +389,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ continue; /* set socket non-blocking */ nonblock(sockfd, TRUE); Curl_nonblock(sockfd, TRUE); rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen); Loading Loading @@ -450,7 +450,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* now disable the non-blocking mode again */ nonblock(sockfd, FALSE); Curl_nonblock(sockfd, FALSE); if(addr) *addr = ai; /* the address we ended up connected to */ Loading Loading @@ -481,7 +481,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* Convert socket to non-blocking type */ nonblock(sockfd, TRUE); Curl_nonblock(sockfd, TRUE); /* This is the loop that attempts to connect to all IP-addresses we know for the given host. One by one. */ Loading Loading @@ -546,7 +546,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ } /* now disable the non-blocking mode again */ nonblock(sockfd, FALSE); Curl_nonblock(sockfd, FALSE); if(addr) /* this is the address we've connected to */ Loading
lib/connect.h +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ * $Id$ *****************************************************************************/ int Curl_nonblock(int socket, /* operate on this */ int nonblock /* TRUE or FALSE */); CURLcode Curl_connecthost(struct connectdata *conn, Curl_addrinfo *host, /* connect to this */ long port, /* connect to this port number */ Loading
lib/url.c +21 −2 Original line number Diff line number Diff line Loading @@ -955,8 +955,27 @@ static bool SocketIsDead(struct connectdata *conn, int sock) #ifdef USE_SSLEAY /* the socket seems fine, but is the SSL later fine too? */ if(conn->ssl.use) { if(SSL_get_shutdown(conn->ssl.handle)) return TRUE; /* this connection is dead! */ int peek; int error; Curl_nonblock(sock, TRUE); peek = SSL_peek(conn->ssl.handle, conn->data->state.buffer, BUFSIZE); infof(conn->data, "SSL_peek returned %d\n", peek); if(-1 == peek) { error = SSL_get_error(conn->ssl.handle, peek); infof(conn->data, "SSL_error returned %d\n", error); if(SSL_ERROR_WANT_READ != error) ret_val = TRUE; } else /* peek did not return -1 */ ret_val = TRUE; Curl_nonblock(sock, FALSE); } #endif } Loading