Eu usei exec 3<>/dev/tcp/192.168.0.101/6435
para estabelecer uma conexão TCP com 192.168.0.101:6435. E recebi e enviei algumas mensagens com o pipe
comando
Agora, desejo encerrar a conexão TCP. Mas, com ss -anpet
posso ver que o próprio bash mantém essa conexão, sem bifurcar um processo filho.
Tentei enviar os sinais 9 e 15 para o processo do bash, mas como você sabe, o bash não pode se matar.
Então, posso encerrar a conexão TCP que estabeleci sem encerrar os pts que estou usando (nem matá-la pelo root nem enviar Ctrl + D)?
bash
pipe
tcp
file-descriptors
TJM
fonte
fonte
bash
com essa concha?bash
certamente pode se matar - embora não seja exatamente isso que você queira fazer aqui!pipe
comando que está usando e que não consigo encontrar no meu sistema? De qual pacotepipe
vem? Quais parâmetros (exemplo) você pode passar para enviar / receber dados pela/dev/tcp/...
conexão? Obrigado./dev/tcp
, nem mesmo consigo encontrar/dev/tcp
. Mas, parece um uso especial com o qual você pode enviar / receber dadospipe
e esse tipo de arquivo. Diz-se que use/dev/tcp/ip/port
para conexões tcp e/dev/udp/ip/port
para pacotes udp. Como meu inglês não é muito bom, não sei como explicá-lo adequadamente. Sinta-se à vontade para editar a pergunta e postar uma resposta.pipe
comando que você mencionou. Eu olheihttps://github.com/clsr/sedbot/blob/master/sedbot.bash
. Não hápipe
comando lá. Ele define duas funções:readmsg
esendmsg
para ler / gravar de / para a conexão, respectivamente.readmsg
usaIFS= read -r -u 3 -t "$READ_TIMEOUT" line
para ler do descritor de arquivo 3 na variávelline
esendmsg
usaecho "$(date +%s.%N) >>> $line" >&4
para escrever no descritor de arquivo 4. De qualquer forma, isso esclarece o método completo. Apipe
menção "comando" ainda permanece um mistério para os leitores.Respostas:
Esse comando abriu a conexão no descritor de arquivo 3. Portanto, para fechar a conexão, você precisa fechar o descritor de arquivo 3. Para fazer isso:
fonte
shutdown(3)
chamada adequada ou apenasclose(2)
o descritor de arquivo?close
, masshutdown
não é mais apropriado que fechar.shutdown
O único uso real é quando você deseja fechar apenas um lado de um soquete duplex.shutdown
envia um FIN, enquanto umclose
envia um RST. Essas são coisas materialmente diferentes.select()
, e eu não acredito que o bash ofereça uma opção.