[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