linux/include/net
Wei Dong 8488df894d [NET]: Fix bugs in "Whether sock accept queue is full" checking
when I use linux TCP socket, and find there is a bug in function
sk_acceptq_is_full().

	When a new SYN comes, TCP module first checks its validation. If valid,
send SYN,ACK to the client and add the sock to the syn hash table. Next
time if received the valid ACK for SYN,ACK from the client. server will
accept this connection and increase the sk->sk_ack_backlog -- which is
done in function tcp_check_req().We check wether acceptq is full in
function tcp_v4_syn_recv_sock().

Consider an example:

 After listen(sockfd, 1) system call, sk->sk_max_ack_backlog is set to
1. As we know, sk->sk_ack_backlog is initialized to 0. Assuming accept()
system call is not invoked now.

1. 1st connection comes. invoke sk_acceptq_is_full(). sk-
>sk_ack_backlog=0 sk->sk_max_ack_backlog=1, function return 0 accept
this connection. Increase the sk->sk_ack_backlog
2. 2nd connection comes. invoke sk_acceptq_is_full(). sk-
>sk_ack_backlog=1 sk->sk_max_ack_backlog=1, function return 0 accept
this connection. Increase the sk->sk_ack_backlog
3. 3rd connection comes. invoke sk_acceptq_is_full(). sk-
>sk_ack_backlog=2 sk->sk_max_ack_backlog=1, function return 1. Refuse
this connection.

I think it has bugs. after listen system call. sk->sk_max_ack_backlog=1
but now it can accept 2 connections.

Signed-off-by: Wei Dong <weid@np.css.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2007-03-02 20:37:33 -08:00
..
bluetooth [PATCH] hci endianness annotations 2006-12-13 09:05:52 -08:00
irda [IRDA] net/irda/: proper prototypes 2007-02-26 11:42:43 -08:00
iucv [S390]: Add AF_IUCV socket support 2007-02-08 13:51:54 -08:00
netfilter [NETFILTER]: nf_conntrack: change nf_conntrack_l[34]proto_unregister to void 2007-02-12 11:14:28 -08:00
sctp [SCTP]: Correctly handle unexpected INIT-ACK chunk. 2007-01-23 20:25:46 -08:00
tc_act
tipc [TIPC]: endianness annotations 2006-12-02 21:21:08 -08:00
act_api.h
addrconf.h [IPV6]: Misc endianness annotations. 2006-12-02 21:22:52 -08:00
af_unix.h
ah.h
arp.h [IPV6]: Assorted trivial endianness annotations. 2006-12-02 21:22:50 -08:00
atmclip.h [ATM]: Annotations. 2006-12-02 21:22:55 -08:00
ax25.h [PATCH] mark struct file_operations const 1 2007-02-12 09:48:44 -08:00
checksum.h [NET]: Make mangling a checksum (0 -> 0xffff on the wire) explicit. 2006-12-02 21:23:39 -08:00
cipso_ipv4.h NetLabel: use the correct CIPSOv4 MLS label limits 2006-12-02 21:24:12 -08:00
compat.h
datalink.h
dn.h [NET]: Reduce sizeof(struct flowi) by 20 bytes. 2006-10-21 20:24:01 -07:00
dn_dev.h
dn_fib.h
dn_neigh.h
dn_nsp.h
dn_route.h [DECNET]: Convert decnet route to use the new dst_entry 'next' pointer 2007-02-10 23:20:43 -08:00
dsfield.h [NET]: IP header modifier helpers annotations. 2006-12-02 21:23:40 -08:00
dst.h [NET]: Reorder fields of struct dst_entry 2007-02-10 23:20:45 -08:00
esp.h
fib_rules.h [NETLINK]: Do precise netlink message allocations where possible 2006-12-02 21:22:11 -08:00
flow.h [NET]: Rethink mark field in struct flowi 2006-12-02 21:21:39 -08:00
gen_stats.h
genetlink.h [GENETLINK]: Add cmd dump completion. 2006-12-02 21:32:09 -08:00
icmp.h [IPV4]: icmp_send() annotation 2006-09-28 18:01:06 -07:00
ieee80211.h [PATCH] ieee80211: WLAN_GET_SEQ_SEQ fix (select correct region) 2007-01-02 20:56:26 -05:00
ieee80211_crypt.h
ieee80211_radiotap.h
ieee80211softmac.h WorkStruct: make allyesconfig 2006-11-22 14:57:56 +00:00
ieee80211softmac_wx.h
if_inet6.h [IPV6]: Per-interface statistics support. 2006-12-02 21:22:08 -08:00
inet6_connection_sock.h [TCP]: Restore SKB socket owner setting in tcp_transmit_skb(). 2007-01-26 01:04:55 -08:00
inet6_hashtables.h [IPV6]: annotate inet6_hashtables 2006-12-02 21:21:10 -08:00
inet_common.h
inet_connection_sock.h [TCP]: Restore SKB socket owner setting in tcp_transmit_skb(). 2007-01-26 01:04:55 -08:00
inet_ecn.h [NET]: IP header modifier helpers annotations. 2006-12-02 21:23:40 -08:00
inet_hashtables.h [NET]: change layout of ehash table 2007-02-08 14:16:46 -08:00
inet_sock.h [IPV4]: annotate inet_lookup() and friends 2006-09-28 18:02:26 -07:00
inet_timewait_sock.h WorkStruct: Pass the work_struct pointer instead of context data 2006-11-22 14:55:48 +00:00
inetpeer.h [IPV4] inet_peer: Group together avl_left, avl_right, v4daddr to speedup lookups on some CPUS 2006-10-20 00:28:35 -07:00
ip.h [TCP]: Restore SKB socket owner setting in tcp_transmit_skb(). 2007-01-26 01:04:55 -08:00
ip6_checksum.h [IPV6]: Dumb typo in generic csum_ipv6_magic() 2006-12-22 11:12:07 -08:00
ip6_fib.h [IPV6]: Convert ipv6 route to use the new dst_entry 'next' pointer 2007-02-10 23:20:40 -08:00
ip6_route.h [IPV6]: Misc endianness annotations. 2006-12-02 21:22:52 -08:00
ip6_tunnel.h
ip_fib.h [IPV4] nl_fib_lookup: Rename fl_fwmark to fl_mark 2006-12-02 21:21:40 -08:00
ip_mp_alg.h [NET]: Rethink mark field in struct flowi 2006-12-02 21:21:39 -08:00
ip_vs.h [NET]: ipvs checksum annotations. 2006-12-02 21:23:41 -08:00
ipcomp.h
ipconfig.h [NET]: ipconfig and nfsroot annotations 2006-12-02 21:21:09 -08:00
ipip.h [IPV6] net/ipv6/sit.c: make 2 functions static 2006-12-02 21:26:15 -08:00
ipv6.h [IPV6]: __ipv6_addr_diff() annotations and cleanup. 2006-12-02 21:22:53 -08:00
ipx.h [IPX]: Annotate and fix IPX checksum 2006-11-05 14:11:25 -08:00
iw_handler.h
lapb.h
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h [LLC]: anotations 2006-12-02 21:21:23 -08:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mip6.h
ndisc.h [IPV6]: Misc endianness annotations. 2006-12-02 21:22:52 -08:00
neighbour.h [NET]: Convert hh_lock to seqlock. 2006-12-08 17:19:20 -08:00
netdma.h Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
netevent.h
netlabel.h NetLabel: convert to an extensibile/sparse category bitmap 2006-12-02 21:31:36 -08:00
netlink.h [PATCH] severing skbuff.h -> mm.h 2006-12-04 02:00:34 -05:00
netrom.h [PATCH] mark struct file_operations const 1 2007-02-12 09:48:44 -08:00
nexthop.h
p8022.h
pkt_cls.h
pkt_sched.h
protocol.h [INET]: Change protocol field in struct inet_protosw to u16 2006-12-02 21:30:55 -08:00
psnap.h
raw.h
rawv6.h [IPV6]: 'info' argument of ipv6 ->err_handler() is net-endian 2006-12-02 21:21:12 -08:00
red.h
request_sock.h [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
rose.h [PATCH] mark struct file_operations const 1 2007-02-12 09:48:44 -08:00
route.h [IPV4]: Convert ipv4 route to use the new dst_entry 'next' pointer 2007-02-10 23:20:38 -08:00
sch_generic.h [NET_SCHED]: Fix endless loops caused by inaccurate qlen counters (part 1) 2006-12-02 21:31:42 -08:00
scm.h
slhc_vj.h
snmp.h
sock.h [NET]: Fix bugs in "Whether sock accept queue is full" checking 2007-03-02 20:37:33 -08:00
syncppp.h
tcp.h [TCP]: remove tcp header from tcp_v4_check (take #2) 2007-02-08 12:38:44 -08:00
tcp_ecn.h
tcp_states.h
timewait_sock.h [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
transp_v6.h [NET]: Supporting UDP-Lite (RFC 3828) in Linux 2006-12-02 21:22:46 -08:00
udp.h [PATCH] severing skbuff.h -> poll.h 2006-12-04 02:00:31 -05:00
udplite.h [NET]: Fix assorted misannotations (from md5 and udplite merges). 2006-12-02 21:27:16 -08:00
x25.h [X.25]: Adds /proc/sys/net/x25/x25_forward to control forwarding. 2007-02-08 13:34:36 -08:00
x25device.h
xfrm.h [IPSEC]: changing API of xfrm6_tunnel_register 2007-02-13 12:55:55 -08:00