Como expor um soquete de domínio UNIX diretamente pelo TCP

13

Eu gostaria de ter um soquete de domínio UNIX, digamos /var/program/program.cmd, por exemplo, exposto via TCP, digamos na porta 12345. Eu também gostaria que isso estivesse em execução em tempo integral em segundo plano.

Qual é a melhor forma de fazer isso? Se for relevante, o sistema está executando o Ubuntu 12.04.2.

Também com a solução proposta, ele sobreviverá ao soquete do domínio que está sendo removido e recriado?

EDITAR

Aqui está o resultado da resposta aceita na forma de um script init: https://github.com/Wirehive/haproxy-remote

SimonJGreen
fonte

Respostas:

18

Você pode usar socatpara exportar seu soquete unix como soquete TCP. Aqui está o comando para fazer isso:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var/program/program.cmd

Isso criará o soquete TCP que escuta na porta 12345 que se conectará ao soquete unix mencionado do seu programa.

Para o problema de exclusão, eu mesmo não testei. Você pode verificar e nos contar sobre isso :)

Nota: Você pode não encontrar o socat instalado, basta digitar: apt-get install socatpara instalá-lo.

Khaled
fonte
1
Obrigado que praticamente funcionou, embora tenha saído após cada comunicação. Depois de brincar Eu estou tendo um bom sucesso com: socat TCP-LISTEN:12345,reuseaddr,fork,su=haproxy UNIX-CLIENT:/var/program/program.cmd. A única questão é como faço para executá-lo em segundo plano?
SimonJGreen
@SimonJGreen: Como este não é um comando interativo que requer entrada, você pode apenas tentar adicionar &no final do comando.
Khaled
OK, eu corri com a sugestão e escrevi um script init para lidar com isso. Aqui está o resultado para qualquer pessoa interessada! github.com/Wirehive/haproxy-remote
SimonJGreen
@alexandermensa gostaria de elaborar?
Eduardo Bezerra