tftp.c: TFTP timeout and unexpected block adjustments
Set ACK timeout to 5 seconds. If we are waiting for block X and receive block Y that is the expected one, we should send ACK and increase X (which is already implemented). Otherwise drop the packet and don't increase retry counter.
This commit is contained in:
parent
34770b8ab0
commit
03adff1eba
19
lib/tftp.c
19
lib/tftp.c
@ -248,11 +248,11 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state)
|
||||
|
||||
state->max_time = state->start_time+maxtime;
|
||||
|
||||
/* Set per-block timeout to 10% of total */
|
||||
timeout = maxtime/10 ;
|
||||
/* Set per-block timeout to total */
|
||||
timeout = maxtime;
|
||||
|
||||
/* Average reposting an ACK after 15 seconds */
|
||||
state->retry_max = (int)timeout/15;
|
||||
/* Average reposting an ACK after 5 seconds */
|
||||
state->retry_max = (int)timeout/5;
|
||||
}
|
||||
/* But bound the total number */
|
||||
if(state->retry_max<3)
|
||||
@ -591,15 +591,10 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
|
||||
/* Is this the block we expect? */
|
||||
rblock = getrpacketblock(&state->rpacket);
|
||||
if(NEXT_BLOCKNUM(state->block) != rblock) {
|
||||
/* No, log it, up the retry count and fail if over the limit */
|
||||
/* No, log it */
|
||||
infof(data,
|
||||
"Received unexpected DATA packet block %d\n", rblock);
|
||||
state->retries++;
|
||||
if(state->retries > state->retry_max) {
|
||||
failf(data, "tftp_rx: giving up waiting for block %d",
|
||||
NEXT_BLOCKNUM(state->block));
|
||||
return CURLE_TFTP_ILLEGAL;
|
||||
}
|
||||
"Received unexpected DATA packet block %d, expecting block %d\n",
|
||||
rblock, NEXT_BLOCKNUM(state->block));
|
||||
break;
|
||||
}
|
||||
/* This is the expected block. Reset counters and ACK it. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user