I want to read the data arriving on a specific TCP port indefinitely
Isso não faz sentido ... se você estava afinal de contas chegando em uma porta UDP, então tudo bem - o TCP, no entanto, é um protocolo baseado em conexão. Uma vez que um cliente se conecta, e você accept()
, você acaba com dois soquetes - um escutando e um conectado ao cliente ... nc
fechará o soquete de escuta original e lidará individualmente com o cliente .
Se você quiser ouvir vários clientes se conectando, tente usar socat
:
socat TCP-LISTEN:12345,fork FD:1 >> ../myfile
Isto irá configurar um soquete de escuta e bifurcar um novo processo na conexão - mantendo a escuta do soquete de escuta. Todos os dados recebidos serão gravados em stdout (descritor de arquivo 1
), que é redirecionado para ../myfile
para anexação.
NOTA : os dados serão recebidos de qualquer número de clientes, em nenhuma ordem garantida, sem enquadramento ... ou seja: será uma confusão de dados confusos se você tiver mais de um cliente por vez.
Se você quiser que socat
cuide do arquivo para você, então você pode usar um dos CREATE
ou OPEN
(veja o página do manual ):
socat TCP-LISTEN:12345,fork OPEN:../myfile,append
Se você estiver satisfeito com uma abordagem " um cliente por vez ", coloque nc
em um loop:
while :; do nc -l 12345; done >> ../myfile
Teste isso com nc
:
nc localhost 12345