socat servidor de arquivos TCP

3

Estou tentando configurar um simples servidor de arquivos socat usando o TCP para enviar arquivos pequenos (~ 100KB).

Aqui estão os servidores e cliente de uma linha para um arquivo:

Servidor: socat -u -d -d OPEN:file.dat TCP-LISTEN:<port>,reuseaddr,fork

Cliente: socat -u -d -d TCP:<server>:<port> OPEN:file.dat,creat

A primeira transferência de dados sempre funciona, mas os itens a seguir nem sempre estão funcionando. A maior parte da transferência a seguir cria um arquivo vazio no lado do cliente. O problema persiste com vários clientes transferindo uma vez, e eu confirmo que os dados não são transferidos quando o bug ocorre, mas os valores de log e retorno não indicam nenhum erro, apenas um loop de dados mais curto.

Eu tentei praticamente todas as opções mencionadas aqui: link

A única maneira que encontrei para fazê-lo funcionar várias vezes consecutivas é remover a opção fork do servidor ouvinte e envolver toda a linha de comandos em um loop bash, mas é claro que falha para vários clientes.

Eu tentei com o Ubuntu, Fedora, Redhat e FreeBSD.

Estou faltando alguma coisa ou isso é um bug?

    
por jean-loup 19.05.2015 / 19:31

1 resposta

1

Eu tive o mesmo problema e levei horas para descobrir o que estava fazendo de errado. Eu ainda meio que não, mas sei pelo menos como fazer funcionar. Eu estava usando:

socat -u FILE:/tmp/test.txt TCP-LISTEN:5778,reuseaddr,fork

E funcionou como esperado quando mudei para:

socat TCP-LISTEN:5778,reuseaddr,fork FILE:/tmp/test.txt

Não sei ao certo o que está realmente mudando, mas descartar o sinal -u e trocar a ordem dos endereços abrirá o soquete para várias chamadas do cliente. Eu tropecei nele enquanto tentava duplicar um exemplo de trabalho conhecido de um servidor .

Além disso, meu cliente era simplesmente socat -u TCP:localhost:5778 STDOUT . Ele funciona sem o -u .

    
por 28.10.2015 / 22:27