Why does connect() succeed even before my server did an
From Andrew Gierth (email@example.com):
Once you have done a listen() call on your socket, the kernel is
primed to accept connections on it. The usual UNIX implementation of
this works by immediately completing the SYN handshake for any
incoming valid SYN segments (connection attempts), creating the socket
for the new connection, and keeping this new socket on an internal
queue ready for the accept() call. So the socket is fully open before
the accept is done.
The other factor in this is the 'backlog' parameter for listen(); that
defines how many of these completed connections can be queued at one
time. If the specified number is exceeded, then new incoming connects
are simply ignored (which causes them to be retried).