/kernel/branches/net/network/socket.inc |
---|
1724,3 → 1724,18 |
or [eax + SOCKET.options], SS_CANTRCVMORE + SS_CANTSENDMORE |
jmp SOCKET_notify_owner |
;----------------------------------------------------------------- |
; |
; SOCKET_cant_recv_more |
; |
; IN: eax = socket ptr |
; OUT: / |
; |
;----------------------------------------------------------------- |
align 4 |
SOCKET_cant_recv_more: |
ret |
/kernel/branches/net/network/stack.inc |
---|
76,7 → 76,7 |
SS_ASYNC equ 0x100 ; async i/o notify |
SS_ISCONFIRMING equ 0x200 ; deciding to accept connection req |
SS_MORETOCOME equ 0x400 ; |
SS_MORETOCOME equ 0x400 |
SOCKET_MAXDATA equ 4096*32 ; must be 4096*(power of 2) where 'power of 2' is at least 8 |
145,19 → 145,6 |
} |
macro packet_to_debug { ; set esi to packet you want to print, ecx to number of bytes |
local .loop |
.loop: |
lodsb |
DEBUGF 1,"%x ", eax:2 |
loop @r |
} |
include "queue.inc" |
include "ethernet.inc" |
263,7 → 250,7 |
;----------------------------------------------------------------- |
; |
; NET_Add_Device: |
; NET_add_Device: |
; |
; This function is called by the network drivers, |
; to register each running NIC to the kernel |
/kernel/branches/net/network/tcp_input.inc |
---|
1339,6 → 1339,22 |
DEBUGF 1,"Processing FIN\n" |
cmp [ebx + TCP_SOCKET.t_state], TCB_CLOSE_WAIT |
je .not_first_fin |
cmp [ebx + TCP_SOCKET.t_state], TCB_CLOSING |
je .not_first_fin |
cmp [ebx + TCP_SOCKET.t_state], TCB_FIN_WAIT_2 |
je .not_first_fin |
DEBUGF 1,"First FIN for this connection\n" |
mov eax, ebx |
call SOCKET_cant_recv_more |
mov [ebx + TCP_SOCKET.t_flags], TF_ACKNOW |
inc [ebx + TCP_SOCKET.RCV_NXT] |
.not_first_fin: |
mov eax, [ebx + TCP_SOCKET.t_state] |
shl eax, 2 |
jmp dword [eax + .FIN_sw_list] |
1356,24 → 1372,29 |
dd .fin_wait2 ;TCB_FIN_WAIT_2 |
dd .fin_timed ;TCB_TIMED_WAIT |
.fin_syn_est: |
jmp .final_processing |
mov [ebx + TCP_SOCKET.t_state], TCB_CLOSE_WAIT |
jmp .no_fin |
.fin_wait1: |
jmp .final_processing |
mov [ebx + TCP_SOCKET.t_state], TCB_CLOSING |
jmp .no_fin |
.fin_wait2: |
jmp .final_processing |
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 |
call SOCKET_is_disconnected |
jmp .no_fin |
.fin_timed: |
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL |
jmp .no_fin |
jmp .final_processing |
.no_fin: |