779,8 → 779,7 |
test [edx + TCP_segment.Flags], TH_ACK |
jz .drop |
|
mov ebx, ECONNREFUSED |
call TCP_drop |
;tp = tcp_drop(tp, ECONNREFUSED) |
|
jmp .drop |
@@: |
1064,9 → 1063,7 |
test [edx + TCP_segment.Flags], TH_SYN |
jz @f |
|
mov ebx, ECONNRESET |
call TCP_drop |
|
;;; tcp_drop ( ECONNRESET) |
jmp .drop_with_reset |
|
test [edx + TCP_segment.Flags], TH_ACK |
1967,9 → 1964,8 |
; TCP_drop |
; |
; IN: eax = socket ptr |
; ebx = error number |
; |
; OUT: eax = socket ptr |
; OUT: / |
; |
;------------------------- |
align 4 |
1977,48 → 1973,21 |
|
DEBUGF 1,"TCP_drop\n" |
|
cmp [eax + TCP_SOCKET.t_state], TCB_SYN_RECEIVED |
jl .no_syn_received |
; cmp [eax + TCP_SOCKET.t_state], TCB_SYN_RECEIVED |
; jl .no_syn_received |
|
mov [eax + TCP_SOCKET.t_state], TCB_CLOSED |
|
call TCP_output |
|
;;; TODO: update stats |
; .no_syn_received: |
|
jmp TCP_close |
ret |
|
.no_syn_received: |
|
;;; TODO: update stats |
|
;;; TODO: check if error code is "Connection timed out' and handle accordingly |
|
mov [eax + SOCKET.errorcode], ebx |
|
jmp TCP_close |
|
|
;------------------------- |
; |
; TCP_close |
; |
; IN: eax = socket ptr |
; OUT: eax = socket ptr |
; |
;------------------------- |
align 4 |
TCP_close: |
|
;;; TODO: update RTT and mean deviation |
;;; TODO: update slow start threshold |
;;; TODO: release connection resources |
|
ret |
|
|
|
|
;--------------------------------------- |
; |
; The easy way to send an ACK/RST/keepalive segment |