[erlang-questions] R13B02 on 8/16 core box: all TCP communication hangs/frozen
Tomas Abrahamsson
tomas.abrahamsson@REDACTED
Thu Nov 19 22:24:30 CET 2009
> The SYN_RECV sockets make me curious. Linux seems to have a second
> backlog queue for when the normal one fills up. Connections in this
> queue seem to send a SYN+ACK (because the client reaches ESTABLISHED)
> but wait in SYN_RECV. The code in net/ipv4/tcp_ipv4.c's
> tcp_v4_conn_request refers to this as a "syn queue" containing "warm
> entries", but I haven't dug deep enough to see how it really works.
> Does anyone know? (Per Hedeland? :-))
I believe you might be seeing what's described here:
http://www.cs.rice.edu/CS/Systems/Web-measurement/paper/node3.html
Here's the section describing the two queues:
"When a connection establishment request (TCP SYN packet) from
a client is received on [a] socket (Figure 1, position 1), the
server TCP responds with a SYN-ACK TCP packet, creates a socket
for the new, incomplete connection, and places it in the listen
socket's SYN-RCVD queue. Later, when the client responds with an
ACK packet to the server's SYN-ACK packet (position 2), the
server TCP removes the socket created above from the SYN-RCVD
queue and places it in the listen socket's queue of connections
awaiting acceptance (accept queue). Each time the WWW server
process executes the accept() system call (position 3), the first
socket in the accept queue of the listen socket is removed and
returned."
I learned a lot from that paper. A PostScript and an html version
is at: http://www.cs.rice.edu/CS/Systems/Web-measurement/
BRs
Tomas
More information about the erlang-questions
mailing list