Loading CHANGES +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,9 @@ Changelog Daniel Stenberg (11 Jan 2010) - Made sure that the progress callback is repeatedly called at a regular interval even during very slow connects. - The tests/runtests.pl script now checks to see if the test case that runs is present in the tests/data/Makefile.am and outputs a notice message on the screen if not. Each test file has to be included in that Makefile.am to get Loading lib/connect.c +31 −16 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -89,6 +89,7 @@ #include "inet_ntop.h" #include "inet_pton.h" #include "sslgen.h" /* for Curl_ssl_check_cxn() */ #include "progress.h" /* The last #include file should be: */ #include "memdebug.h" Loading Loading @@ -192,7 +193,8 @@ long Curl_timeleft(struct connectdata *conn, #define WAITCONN_FDSET_ERROR 2 static int waitconnect(curl_socket_t sockfd, /* socket */ int waitconnect(struct connectdata *conn, curl_socket_t sockfd, /* socket */ long timeout_msec) { int rc; Loading @@ -203,21 +205,34 @@ int waitconnect(curl_socket_t sockfd, /* socket */ (void)verifyconnect(sockfd, NULL); #endif while(1) { /* now select() until we get connect or timeout */ rc = Curl_socket_ready(CURL_SOCKET_BAD, sockfd, (int)timeout_msec); rc = Curl_socket_ready(CURL_SOCKET_BAD, sockfd, (int)(timeout_msec>1000? 1000:timeout_msec)); if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; if(-1 == rc) /* error, no connect here, try next */ return WAITCONN_SELECT_ERROR; else if(0 == rc) /* timeout, no connect today */ else if(0 == rc) { /* timeout */ timeout_msec -= 1000; if(timeout_msec <= 0) return WAITCONN_TIMEOUT; continue; } if(rc & CURL_CSELECT_ERR) /* error condition caught */ return WAITCONN_FDSET_ERROR; /* we have a connect! */ break; } return WAITCONN_CONNECTED; } Loading Loading @@ -553,7 +568,7 @@ CURLcode Curl_is_connected(struct connectdata *conn, Curl_expire(data, allow); /* check for connect without timeout as we want to return immediately */ rc = waitconnect(sockfd, 0); rc = waitconnect(conn, sockfd, 0); if(WAITCONN_CONNECTED == rc) { int error; Loading Loading @@ -823,7 +838,7 @@ singleipconnect(struct connectdata *conn, case EAGAIN: #endif #endif rc = waitconnect(sockfd, timeout_ms); rc = waitconnect(conn, sockfd, timeout_ms); break; default: /* unknown error, fallthrough and try another address! */ Loading Loading
CHANGES +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,9 @@ Changelog Daniel Stenberg (11 Jan 2010) - Made sure that the progress callback is repeatedly called at a regular interval even during very slow connects. - The tests/runtests.pl script now checks to see if the test case that runs is present in the tests/data/Makefile.am and outputs a notice message on the screen if not. Each test file has to be included in that Makefile.am to get Loading
lib/connect.c +31 −16 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -89,6 +89,7 @@ #include "inet_ntop.h" #include "inet_pton.h" #include "sslgen.h" /* for Curl_ssl_check_cxn() */ #include "progress.h" /* The last #include file should be: */ #include "memdebug.h" Loading Loading @@ -192,7 +193,8 @@ long Curl_timeleft(struct connectdata *conn, #define WAITCONN_FDSET_ERROR 2 static int waitconnect(curl_socket_t sockfd, /* socket */ int waitconnect(struct connectdata *conn, curl_socket_t sockfd, /* socket */ long timeout_msec) { int rc; Loading @@ -203,21 +205,34 @@ int waitconnect(curl_socket_t sockfd, /* socket */ (void)verifyconnect(sockfd, NULL); #endif while(1) { /* now select() until we get connect or timeout */ rc = Curl_socket_ready(CURL_SOCKET_BAD, sockfd, (int)timeout_msec); rc = Curl_socket_ready(CURL_SOCKET_BAD, sockfd, (int)(timeout_msec>1000? 1000:timeout_msec)); if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; if(-1 == rc) /* error, no connect here, try next */ return WAITCONN_SELECT_ERROR; else if(0 == rc) /* timeout, no connect today */ else if(0 == rc) { /* timeout */ timeout_msec -= 1000; if(timeout_msec <= 0) return WAITCONN_TIMEOUT; continue; } if(rc & CURL_CSELECT_ERR) /* error condition caught */ return WAITCONN_FDSET_ERROR; /* we have a connect! */ break; } return WAITCONN_CONNECTED; } Loading Loading @@ -553,7 +568,7 @@ CURLcode Curl_is_connected(struct connectdata *conn, Curl_expire(data, allow); /* check for connect without timeout as we want to return immediately */ rc = waitconnect(sockfd, 0); rc = waitconnect(conn, sockfd, 0); if(WAITCONN_CONNECTED == rc) { int error; Loading Loading @@ -823,7 +838,7 @@ singleipconnect(struct connectdata *conn, case EAGAIN: #endif #endif rc = waitconnect(sockfd, timeout_ms); rc = waitconnect(conn, sockfd, timeout_ms); break; default: /* unknown error, fallthrough and try another address! */ Loading