1101,11 → 1101,11 |
@@: |
|
|
;; TODO: use zero flag as 'ourfinisacked' |
|
|
|
|
|
; General ACK handling complete |
; Now do the state-specific ones |
|
1126,25 → 1126,46 |
dd .ack_tw ;TCB_TIMED_WAIT |
|
|
.ack_fw1: ; 963 |
.ack_fw1: |
jz .ack_processed |
|
test [ebx + SOCKET.state], SO_CANTRCVMORE |
jnz @f |
;;soisdisconnected(ebx) |
mov [ebx + TCP_SOCKET.timer_timed_wait], TCP_time_max_idle |
@@: |
|
mov [ebx + TCP_SOCKET.t_state], TCB_FIN_WAIT_2 |
jmp .ack_processed |
|
.ack_c: ; 958 |
|
.ack_c: |
jz .ack_processed |
|
mov [ebx + TCP_SOCKET.t_state], TCB_TIMED_WAIT |
call TCP_cancel_timers |
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL |
;;soisdisconnected(ebx) |
jmp .ack_processed |
|
.ack_la: ; 999 |
|
jmp .ack_processed |
.ack_la: |
jz .ack_processed |
|
.ack_tw: ; 1010 |
call TCP_close |
jmp .drop |
|
jmp .ack_processed |
|
.ack_tw: |
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL |
jmp .drop_after_ack |
|
|
|
|
|
|
|
.reset_dupacks: ; We got a new ACK, reset duplicate ACK counter |
|
mov [ebx + TCP_SOCKET.t_dupacks], 0 |