Answer Posted / chaitanya
Remember that TCP guarantees all data transmitted will be delivered, if at all possible. When you close a socket, the server goes into a TIME_WAIT state, just to be really really sure that all the data has gone through. When a socket is closed, both sides agree by sending messages to each other that they will send no more data. This, it seemed to me was good enough, and after the handshaking is done, the socket should be closed. The problem is two-fold. First, there is no way to be sure that the last ack was communicated successfully. Second, there may be "wandering duplicates" left on the net that must be dealt with if they are delivered.
| Is This Answer Correct ? | 1 Yes | 0 No |
Post New Answer View All Answers
What is a socket api?
How can I force a socket to send the data in its buffer?
What is difference between socket and websocket?
How can I set the timeout for the connect() system call?
Are sockets files?
What is the difference between SO_REUSEADDR and SO_REUSEPORT?
How do I convert a string into an internet address?
Is a socket a file?
How do I use TCP_NODELAY?
What is socket address with example?
Is there any advantage to handling the signal, rather than just ignoring it and checking for the EPIPE error? Are there any useful parameters passed to the signal catching function?
Can multiple clients connect to same socket?
What are the pros/cons of select(), non-blocking I/O and SIGIO?
How to find other end of unix socket connection?
How do unix sockets work?