Estou tentando usar loginhook para baixar grandes quantidades de dados e tenho tido problemas com Eu acertei para nc sair prematuramente sem motivo aparente. Este é um script de teste simplificado:
#!/bin/bash
exec > /tmp/lhook.out.txt 2> /tmp/lhook.err.txt
nc -v server 4444 > /tmp/nc-test
echo "Exit value: $?"
No servidor, quando executo um listener nc simples como echo "Hello world. | nc -l 4444
, a transferência funciona corretamente. Mas quando eu quero transferir um arquivo maior, como nc -l 4444 < /path/to/some/large.file
, o cliente transfere apenas uma pequena parte (às vezes 2kiB, às vezes ~ 250 kiB). O valor de saída informado é 0.
Ah, e claro - o mesmo script executado em um Terminal.app dentro de uma sessão do usuário funciona bem.
Alguém pode ajudar com a depuração, explicar o que está acontecendo ou fornecer uma solução?
EDITAR :
Eu tive dtruss
snoop no syscalls do netcat, e é isso que eu recebi:
157/0x4c6: write(0x1, "j,0767734$f1F60&f 157/0x4c6: write(0x1, "j,0767734$f1F60&f%pre%4%pre%", 0x400) = 1024 0
157/0x4c6: select(0x5, 0x7FFF53A87B40, 0x0, 0x0, 0x0) = 1 0
157/0x4c6: read(0x4, "%pre%1u4)u\f5\f6340%pre%31%pre%1\b3577%pre%337P377R%pre%4177%pre%", 0x400)
= 1024 0
157/0x4c6: write(0x1, "%pre%1u4)u\f5\f6340%pre%31%pre%1\b3577%pre%337P377R%pre%4177%pre%", 0x400)
= 1024 0
157/0x4c6: select(0x5, 0x7FFF53A87B40, 0x0, 0x0, 0x0) = 1 0
157/0x4c6: read(0x4, "%pre%", 0x400) = 0 0
157/0x4c6: shutdown(0x4, 0x0, 0x0) = -1 Err#57
157/0x4c6: close(0x4) = 0 0
157/0x4c6: close(0x3) = 0 0
157/0x4c6: close(0x3) = -1 Err#9
4%pre%", 0x400) = 1024 0
157/0x4c6: select(0x5, 0x7FFF53A87B40, 0x0, 0x0, 0x0) = 1 0
157/0x4c6: read(0x4, "%pre%1u4)u\f5\f6340%pre%31%pre%1\b3577%pre%337P377R%pre%4177%pre%", 0x400)
= 1024 0
157/0x4c6: write(0x1, "%pre%1u4)u\f5\f6340%pre%31%pre%1\b3577%pre%337P377R%pre%4177%pre%", 0x400)
= 1024 0
157/0x4c6: select(0x5, 0x7FFF53A87B40, 0x0, 0x0, 0x0) = 1 0
157/0x4c6: read(0x4, "%pre%", 0x400) = 0 0
157/0x4c6: shutdown(0x4, 0x0, 0x0) = -1 Err#57
157/0x4c6: close(0x4) = 0 0
157/0x4c6: close(0x3) = 0 0
157/0x4c6: close(0x3) = -1 Err#9
Eu estou supondo que, por algum motivo, o kernel está dando nc EOF em vez de esperar por mais dados.