Hello, Artur Hefczyc wrote: > Only when you attempt to send some data, even a single character, the > TCP/IP > stack tries to deliver it to the destination address. Of course if the > connection > is broken, the attempt fails and an error is returned to sending > application.
No, it is not correct. If you try to send a character, the application will send that data to the TCP/IP layer, that will put the data in the TCP/IP cache. The data will have left the application and the send will be successfull. It does not mean that the receiving party has received it. It is an asynchronous process. The client connection will have a failing TCP send only if the TCP/IP buffer is full after a given timeout. Now, the TCP/IP connection can be broken and the TCP/IP stack might struggle for quite a long time (resending, etc), before knowing / acknoledging it is actually broken). Under some condition, the OS layer will not issue a TCP connection close event, until a time out is reached. In this case it will take a long time before the application know the connection is lost. The more specific equiment you have to pass, the more the problem can happen (for example on mobile where this is built-in to make the device more tolerant to loss of connection). -- Mickaël Rémond http://www.process-one.net/
