DarkLeafyGreen
DarkLeafyGreen

Reputation: 70406

Socat terminates after connection close

This comand (serial port redirector) accepts a single connection on TCP:11313 :

socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,forever,reuseaddr

However when the connection is lost, the above socat process is killed and the client is not able to connect.

I can solve this by adding fork option at the end of the above command. But then multiple clients will be able to connect. But I want to accept only one connection.

Any ideas how to achieve this?

Upvotes: 11

Views: 18690

Answers (1)

Phillip
Phillip

Reputation: 13668

You can limit the number of children with the max-children option:

LISTEN option group, options specific to listening sockets

max-children= Limits the number of concurrent child processes [int]. Default is no limit.

With this you can limit the number of clients that can interact with the PTY to one, but won't prevent others from connecting. Others will simply queue until the first connection is closed. If you want to prevent that, I'd suggest to just wrap the socat call in a while true; do ..; done loop:

while true; do
  socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,forever,reuseaddr
done

Upvotes: 11

Related Questions