Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1715 → Rev 1716

/kernel/branches/net/network/socket.inc
30,7 → 30,7
.Domain dd ? ; INET/UNIX/..
.Type dd ? ; RAW/STREAM/DGRAP
.Protocol dd ? ; ICMP/IPv4/ARP/TCP/UDP
; .errorcode dd ?
.errorcode dd ?
 
.options dd ?
.state dd ?
/kernel/branches/net/network/stack.inc
76,7 → 76,15
 
MAX_backlog equ 20 ; maximum backlog for stream sockets
 
; Error Codes
ENOBUFS equ 55
ECONNREFUSED equ 61
ECONNRESET equ 52
ETIMEDOUT equ 60
ECONNABORTED equ 53
 
 
 
virtual at 0
 
NET_DEVICE:
/kernel/branches/net/network/tcp.inc
779,7 → 779,8
test [edx + TCP_segment.Flags], TH_ACK
jz .drop
 
;tp = tcp_drop(tp, ECONNREFUSED)
mov ebx, ECONNREFUSED
call TCP_drop
 
jmp .drop
@@:
1063,7 → 1064,9
test [edx + TCP_segment.Flags], TH_SYN
jz @f
 
;;; tcp_drop ( ECONNRESET)
mov ebx, ECONNRESET
call TCP_drop
 
jmp .drop_with_reset
 
test [edx + TCP_segment.Flags], TH_ACK
1964,8 → 1967,9
; TCP_drop
;
; IN: eax = socket ptr
; ebx = error number
;
; OUT: /
; OUT: eax = socket ptr
;
;-------------------------
align 4
1973,21 → 1977,48
 
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
 
; .no_syn_received:
;;; TODO: update stats
 
jmp TCP_close
 
.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