Yang Tse pointed out a few remaining quirks from my timeout refactoring from
Feb 7 that didn't abort properly on timeouts. These are actually old problems but now they should be fixed.
This commit is contained in:
parent
dc9fe9c361
commit
fcc320ee40
5
CHANGES
5
CHANGES
@ -6,6 +6,11 @@
|
||||
|
||||
Changelog
|
||||
|
||||
Daniel S (11 Feb 2008)
|
||||
- Yang Tse pointed out a few remaining quirks from my timeout refactoring from
|
||||
Feb 7 that didn't abort properly on timeouts. These are actually old
|
||||
problems but now they should be fixed.
|
||||
|
||||
Yang Tse (10 Feb 2008)
|
||||
- Bug report #1888932 (http://curl.haxx.se/bug/view.cgi?id=1888932) points out
|
||||
and provides test program that demonstrates that libcurl might not set error
|
||||
|
@ -175,8 +175,13 @@ static CURLcode Curl_qsossl_handshake(struct connectdata * conn, int sockindex)
|
||||
/* figure out how long time we should wait at maximum */
|
||||
timeout_ms = Curl_timeleft(conn, NULL, TRUE);
|
||||
|
||||
/* SSL_Handshake() timeout resolution is second, so round up. */
|
||||
if(timeout_ms < 0) {
|
||||
/* time-out, bail out, go home */
|
||||
failf(data, "Connection time-out");
|
||||
return CURLE_OPERATION_TIMEDOUT;
|
||||
}
|
||||
|
||||
/* SSL_Handshake() timeout resolution is second, so round up. */
|
||||
h->timeout = (timeout_ms + 1000 - 1) / 1000;
|
||||
|
||||
/* Set-up protocol. */
|
||||
@ -429,7 +434,7 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
|
||||
case SSL_ERROR_IO:
|
||||
switch (errno) {
|
||||
case EWOULDBLOCK:
|
||||
*wouldblock = TRUE;
|
||||
*wouldblock = TRUE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
12
lib/socks.c
12
lib/socks.c
@ -140,6 +140,12 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
|
||||
/* get timeout */
|
||||
timeout = Curl_timeleft(conn, NULL, TRUE);
|
||||
|
||||
if(timeout < 0) {
|
||||
/* time-out, bail out, go home */
|
||||
failf(data, "Connection time-out");
|
||||
return CURLE_OPERATION_TIMEDOUT;
|
||||
}
|
||||
|
||||
Curl_nonblock(sock, FALSE);
|
||||
|
||||
/*
|
||||
@ -394,6 +400,12 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
|
||||
/* get timeout */
|
||||
timeout = Curl_timeleft(conn, NULL, TRUE);
|
||||
|
||||
if(timeout < 0) {
|
||||
/* time-out, bail out, go home */
|
||||
failf(data, "Connection time-out");
|
||||
return CURLE_OPERATION_TIMEDOUT;
|
||||
}
|
||||
|
||||
Curl_nonblock(sock, TRUE);
|
||||
|
||||
/* wait until socket gets connected */
|
||||
|
26
lib/tftp.c
26
lib/tftp.c
@ -189,16 +189,24 @@ const struct Curl_handler Curl_handler_tftp = {
|
||||
*
|
||||
*
|
||||
**********************************************************/
|
||||
static void tftp_set_timeouts(tftp_state_data_t *state)
|
||||
static CURLcode tftp_set_timeouts(tftp_state_data_t *state)
|
||||
{
|
||||
time_t maxtime, timeout;
|
||||
long timeout_ms;
|
||||
|
||||
time(&state->start_time);
|
||||
|
||||
/* Compute drop-dead time */
|
||||
timeout_ms = Curl_timeleft(state->conn, NULL, TRUE);
|
||||
|
||||
if(timeout_ms < 0) {
|
||||
/* time-out, bail out, go home */
|
||||
failf(state->conn->data, "Connection time-out");
|
||||
return CURLE_OPERATION_TIMEDOUT;
|
||||
}
|
||||
|
||||
if(state->state == TFTP_STATE_START) {
|
||||
/* Compute drop-dead time */
|
||||
timeout_ms = Curl_timeleft(state->conn, NULL, TRUE);
|
||||
|
||||
maxtime = (time_t)(timeout_ms + 500) / 1000;
|
||||
state->max_time = state->start_time+maxtime;
|
||||
|
||||
@ -219,8 +227,6 @@ static void tftp_set_timeouts(tftp_state_data_t *state)
|
||||
|
||||
}
|
||||
else {
|
||||
/* Compute drop-dead time */
|
||||
timeout_ms = Curl_timeleft(state->conn, NULL, TRUE);
|
||||
if(timeout_ms > 0)
|
||||
maxtime = (time_t)(timeout_ms + 500) / 1000;
|
||||
else
|
||||
@ -250,6 +256,8 @@ static void tftp_set_timeouts(tftp_state_data_t *state)
|
||||
"set timeouts for state %d; Total %d, retry %d maxtry %d\n",
|
||||
state->state, (state->max_time-state->start_time),
|
||||
state->retry_time, state->retry_max);
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
/**********************************************************
|
||||
@ -343,13 +351,17 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
|
||||
case TFTP_EVENT_ACK: /* Connected for transmit */
|
||||
infof(data, "%s\n", "Connected for transmit");
|
||||
state->state = TFTP_STATE_TX;
|
||||
tftp_set_timeouts(state);
|
||||
res = tftp_set_timeouts(state);
|
||||
if(res)
|
||||
break;
|
||||
return tftp_tx(state, event);
|
||||
|
||||
case TFTP_EVENT_DATA: /* connected for receive */
|
||||
infof(data, "%s\n", "Connected for receive");
|
||||
state->state = TFTP_STATE_RX;
|
||||
tftp_set_timeouts(state);
|
||||
res = tftp_set_timeouts(state);
|
||||
if(res)
|
||||
break;
|
||||
return tftp_rx(state, event);
|
||||
|
||||
case TFTP_EVENT_ERROR:
|
||||
|
Loading…
Reference in New Issue
Block a user