c->flags = UTCP_TCP;
}
+synack:
// Return SYN+ACK, go to SYN_RECEIVED state
c->snd.wnd = hdr.wnd;
c->rcv.irs = hdr.seq;
case CLOSING:
if(c->snd.una == c->snd.last) {
gettimeofday(&c->conn_timeout, NULL);
- c->conn_timeout.tv_sec += 60;
+ c->conn_timeout.tv_sec += utcp->timeout;
set_state(c, TIME_WAIT);
}
break;
case SYN_RECEIVED:
+ // This is a retransmit of a SYN, send back the SYNACK.
+ goto synack;
+
case ESTABLISHED:
case FIN_WAIT_1:
case FIN_WAIT_2:
case FIN_WAIT_2:
gettimeofday(&c->conn_timeout, NULL);
- c->conn_timeout.tv_sec += 60;
+ c->conn_timeout.tv_sec += utcp->timeout;
set_state(c, TIME_WAIT);
break;