Why does connect() succeed even before my server did an accept()?



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

Post New Answer

More Unix Socket Programming Interview Questions

How can my client work through a firewall/proxy server?

1 Answers  


How do I send [this] over a socket?

1 Answers  


Why do I get EPROTO from read()?

0 Answers  


What's the difference between a socket and a port?

0 Answers  


system choose one for me on the connect() call? Should I bind() a port number in my client program, or let the?

0 Answers  






What is difference between socket and websocket?

0 Answers  


How should I choose a port number for my server?

1 Answers  


How do I get the port number for a given service?

1 Answers  


How can I read ICMP errors from connected UDP sockets?

1 Answers  


Why does connect() succeed even before my server did an accept()?

1 Answers  


What is a socket api?

0 Answers  


How would I put my socket in non-blocking mode?

1 Answers  


Categories