A questão importante é: como A reage à perda de conexão ou a conexão é recusada? Qualquer coisa que apenas considere que uma única conexão TCP permanecerá para sempre será frágil; essa é apenas a natureza da internet.
Que tal configurar o socat
como [x]inetd
service?
Você definiria xinetd
para ouvir em PORT-B e inicie o socat -u TCP4-LISTEN:PORT-A,reuseaddr STDIO
assim que o B-side se conectar.
xinetd
transmitirá o tráfego de entrada do lado B para a entrada padrão de socat
e obterá a saída padrão de socat
e passará para o lado B.
Se B se desconectar, o processo socat
poderá terminar; xinetd
iniciará um novo assim que B se conectar novamente. Enquanto B está desconectado, A receberá erros de "conexão recusada".
Uma vez eu tive que fazer algo parecido em um antigo sistema HP-UX.