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.