Do TCP sockets automatically close after some time if no data is sent?

前端 未结 4 1850
一向
一向 2021-02-03 10:15

I have a client server situation where the client opens a TCP socket to the server, and sometimes long periods of time will pass with no data being sent between them. I have enc

4条回答
  •  不思量自难忘°
    2021-02-03 10:58

    On Windows, sockets with no data sent are a big source for trouble in many applications and must be handled correctly.

    The problem is, that SO_KEEPALIVE's period can be set system-wide (otherwise, a default is useless two hours) or with the later winsock API.

    Therefore, many applications do send some occasional byte of data every now and then (to be disregarded by the peer) only to make the network layer declare disconnection after ACK is not received (after all due retransmissions done by the layer and ack timeout).

    Answering your question: no, the sockets do not disconnect automatically.

    Yet, you must be careful with the above issue. What complicates it further is that testing this behavior is very hard. For example, if you set everything correctly and you expect to detect disconnection properly, you cannot test it by disconnecting the physical layer. This is because the NIC will sense the carrier loss and the socket layer will signal to close all application sockets that relied on it. A good way to test it is connect two computers with 3 legs and two switches in between, disconnecting the middle leg, thus preventing carrier loss but still physically disconnecting the machines.

提交回复
热议问题