Search code examples
linuxtcp

Can a TCP connection between two local processes be closed without either process being involved?


I have two processes written in two different programming languages that exchange information via a local TCP connection. One process is starting the other but their lifetime must be shared, i.e. if one dies, so does the other and vice versa.

I would like to use the TCP connection as the mechanism to detect if the other side is crashing, but I'm not sure if it's safe. I wonder if there are cases where the connection could be closed for other reasons than one of process crashing or exiting.

Edit:

  • Ideally, the system needs to be portable across OS which is why TCP connections are used instead of Unix domain socket.
  • I know that it's possible to use administrative tools to kill the connection. What I want to know is if there are cases where in normal circumstances (both processes running fine) the connection would be close.

Solution

  • If the computers that are serving your processes are distant, then of course network problems along the way may cause problems, otherwise it's not trivial to close a connection. A tool such as "tcpkill" can close connections that originates or terminates on the local computer, and if you cross a firewall, then of course the firewall admin may close connections going through.

    I think your scheme would work fairly well; if something causes the network connection to go down, then both your processes will terminate, so your worst case scenario would be excessive downtime - which I wouldn't expect from a connection through a normal network.


    tcpkill: https://linux.die.net/man/8/tcpkill