david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

Don't send a second FIN if we receive a FIN while in FIN_WAIT_2

This commit is contained in:
Michael Brown 2006-12-27 23:44:05 +00:00
parent 61ed298bc7
commit be31970e36
1 changed files with 6 additions and 5 deletions

View File

@ -573,13 +573,14 @@ static int tcp_rx_fin ( struct tcp_connection *conn, uint32_t seq ) {
if ( ( conn->rcv_ack - seq ) > 0 )
return 0;
/* Mark FIN as received and send our own FIN */
conn->tcp_state |= ( TCP_STATE_RCVD ( TCP_FIN ) |
TCP_STATE_SENDING ( TCP_FIN ) );
/* Acknowledge FIN */
/* Mark FIN as received and acknowledge it */
conn->tcp_state |= TCP_STATE_RCVD ( TCP_FIN );
conn->rcv_ack++;
/* If we haven't already sent our FIN, send a FIN */
if ( ! ( conn->tcp_state & TCP_STATE_ACKED ( TCP_FIN ) ) )
conn->tcp_state |= TCP_STATE_SENDING ( TCP_FIN );
/* Break association with application */
tcp_disassociate ( conn );