/kernel/branches/net/network/tcp_input.inc |
---|
1129,11 → 1129,10 |
.ack_fw1: |
jz .ack_processed |
test [ebx + SOCKET.state], SS_CANTRCVMORE |
test [ebx + SOCKET.state], SO_CANTRCVMORE |
jnz @f |
mov eax, ebx |
call SOCKET_is_disconnected |
;;; mov [ebx + TCP_SOCKET.timer_timed_wait], TCP_time_max_idle |
;;soisdisconnected(ebx) |
mov [ebx + TCP_SOCKET.timer_timed_wait], TCP_time_max_idle |
@@: |
mov [ebx + TCP_SOCKET.t_state], TCB_FIN_WAIT_2 |
1144,11 → 1143,9 |
jz .ack_processed |
mov [ebx + TCP_SOCKET.t_state], TCB_TIMED_WAIT |
mov eax, ebx |
call TCP_cancel_timers |
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL |
mov eax, ebx |
call SOCKET_is_disconnected |
;;soisdisconnected(ebx) |
jmp .ack_processed |
1155,8 → 1152,6 |
.ack_la: |
jz .ack_processed |
mov eax, ebx |
call TCP_close |
jmp .drop |
/kernel/branches/net/network/socket.inc |
---|
15,7 → 15,6 |
$Revision$ |
virtual at 0 |
SOCKET: |
1681,46 → 1680,3 |
pop ebx |
ret |
;----------------------------------------------------------------- |
; |
; SOCKET_is_disconnecting |
; |
; IN: eax = socket ptr |
; OUT: / |
; |
;----------------------------------------------------------------- |
align 4 |
SOCKET_is_disconnecting: |
and [eax + SOCKET.options], not (SS_ISCONNECTING) |
or [eax + SOCKET.options], SS_ISDISCONNECTING + SS_CANTRCVMORE + SS_CANTSENDMORE |
jmp SOCKET_notify_owner |
;----------------------------------------------------------------- |
; |
; SOCKET_is_disconnected |
; |
; IN: eax = socket ptr |
; OUT: / |
; |
;----------------------------------------------------------------- |
align 4 |
SOCKET_is_disconnected: |
and [eax + SOCKET.options], not (SS_ISCONNECTING + SS_ISCONNECTED + SS_ISDISCONNECTING) |
or [eax + SOCKET.options], SS_CANTRCVMORE + SS_CANTSENDMORE |
jmp SOCKET_notify_owner |
/kernel/branches/net/network/stack.inc |
---|
62,23 → 62,6 |
; Socket options |
SO_ACCEPTCON equ 1 |
; Socket States |
SS_NOFDREF equ 0x001 ; no file table ref any more |
SS_ISCONNECTED equ 0x002 ; socket connected to a peer |
SS_ISCONNECTING equ 0x004 ; in process of connecting to peer |
SS_ISDISCONNECTING equ 0x008 ; in process of disconnecting |
SS_CANTSENDMORE equ 0x010 ; can't send more data to peer |
SS_CANTRCVMORE equ 0x020 ; can't receive more data from peer |
SS_RCVATMARK equ 0x040 ; at mark on input |
SS_ISABORTING equ 0x080 ; aborting fd references - close() |
SS_RESTARTSYS equ 0x100 ; restart blocked system calls |
SS_ISDISCONNECTED equ 0x800 ; socket disconnected from peer |
SS_ASYNC equ 0x100 ; async i/o notify |
SS_ISCONFIRMING equ 0x200 ; deciding to accept connection req |
SS_MORETOCOME equ 0x400 ; |
SOCKET_MAXDATA equ 4096*32 ; must be 4096*(power of 2) where 'power of 2' is at least 8 |
; Network driver types |
/kernel/branches/net/network/tcp_timer.inc |
---|
111,25 → 111,4 |
jmp .loop |
.exit: |
} |
; eax = socket |
TCP_cancel_timers: |
push eax edi |
lea edi, [eax + TCP_SOCKET.timer_retransmission] |
xor eax, eax |
stosd |
stosd |
stosd |
stosd |
stosd |
pop edi eax |
ret |
} |