Why does connect() succeed even before my server did an accept()?
Answer / chaitanya
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).
| Is This Answer Correct ? | 0 Yes | 0 No |
Why does connect() succeed even before my server did an accept()?
How many sockets can a cpu have?
How do I properly close a socket?
How come only the first part of my datagram is getting through?
When will my application receive SIGPIPE?
How can I read ICMP errors from connected UDP sockets?
How do I get my server to find out the clients address / host- name?
How do Sockets Work?
What is difference between socket and websocket?
How often should I re-transmit un-acknowleged messages?
Why does the sockets buffer fill up sooner than expected?
What exactly is a socket?