curl-users
[PATCH] TFTP: Fix Connect and Transfer Timeout Behavior
From: Grant Erickson <gerickson_at_nuovations.com>
Date: Mon, 12 Jan 2009 00:07:14 -0800
Date: Mon, 12 Jan 2009 00:07:14 -0800
Fix timeouts for TFTP such that specifying a connect-timeout, a max-time
or both options work correctly and as expected by passing the correct
Boolean value to Curl_timeleft via the 'duringconnect' parameter.
Signed-off-by: Grant Erickson <gerickson_at_nuovations.com>
--- With this small change, curl TFTP now behaves as expected (and likely as originally-designed): 1) For non-existent or unreachable dotted IP addresses: a) With no options, follows the default curl 300s timeout... b) With --connect-timeout only, follows that value... c) With --max-time only, follows that value... d) With both --connect-timeout and --max-time, follows the smaller value... and times out with a "curl: (7) Couldn't connect to server" error. 2) For transfers to/from a valid host: a) With no options, follows default curl 300s timeout for the first XRQ/DATA/ACK transaction and the default TFTP 3600s timeout for the remainder of the transfer... b) With --connect-time only, follows that value for the first XRQ/DATA/ACK transaction and the default TFTP 3600s timeout for the remainder of the transfer... c) With --max-time only, follows that value for the first XRQ/DATA/ACK transaction and for the remainder of the transfer... d) With both --connect-timeout and --max-time, follows the former for the first XRQ/DATA/ACK transaction and the latter for the remainder of the transfer... and times out with a "curl: (28) Timeout was reached" error as appropriate. lib/tftp.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/tftp.c b/lib/tftp.c index b59fbae..0e22395 100644 --- a/lib/tftp.c +++ b/lib/tftp.c @@ -192,11 +192,12 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state) { time_t maxtime, timeout; long timeout_ms; + const bool start = (state->state == TFTP_STATE_START); time(&state->start_time); /* Compute drop-dead time */ - timeout_ms = Curl_timeleft(state->conn, NULL, TRUE); + timeout_ms = Curl_timeleft(state->conn, NULL, start); if(timeout_ms < 0) { /* time-out, bail out, go home */ @@ -204,7 +205,7 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state) return CURLE_OPERATION_TIMEDOUT; } - if(state->state == TFTP_STATE_START) { + if(start) { maxtime = (time_t)(timeout_ms + 500) / 1000; state->max_time = state->start_time+maxtime; -- 1.6.1 ------------------------------------------------------------------- List admin: http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-users FAQ: http://curl.haxx.se/docs/faq.html Etiquette: http://curl.haxx.se/mail/etiquette.htmlReceived on 2009-01-12