We have a linux system (Red Hat 7.4) that occasionally disconnects a permanent TCP/IP connection to a peer device for no apparent reason. The client side code which initiates the permanent connection, will be sending and receiving data with no issues. Then suddenly it receive an async receive callback with zero bytes, indicating an EOF condition. At this point, according to standard practice, the client closes the connection. The problem is that there is no evidence of the peer closing the connection.
Wireshark traces show normal bi-directional data flow, then the client sends a FIN/ACK packet when it detects the EOF, followed by a RST/ACK, which terminates the connection. The server / peer never initiates a FIN to end the connection. It is always the client that ends the connection due to the client process receiving the EOF indication on the socket async RECV() callback.
Are there any other conditions that can cause the EOF condition to be reported back to the socket caller that are external to the client application itself?
1