Criar soquete nomeado Unix na linha de comando


Respostas:


21

Não existe um equivalente exato de mkfifo para socket, ou seja, não há comando que apenas crie um socket "pendurado". Isso ocorre por um motivo histórico: a função do servidor bind (), que cria um nome / inode de soquete no sistema de arquivos, falha se o nome já estiver sendo usado. Em outras palavras, o servidor não pode operar em um soquete pré-existente.

Portanto, se você criou o soquete anteriormente, ele precisaria ser removido pelo servidor primeiro. Nenhum benefício. Como você vê na resposta de Gregory, você pode criar um soquete se mantiver um servidor para ele, como o netcat. Uma vez que um servidor se foi, o soquete antigo se foi. Um novo servidor possui um novo soquete e todos os clientes precisam se reconectar, apesar do nome do soquete ser idêntico.


15

Os programas mais recentes do netcat (nc) e similares (socat até onde eu sei) têm opções de soquete de domínio.
Senão, você pode dar uma olhada no ucspi-unix


1
+1 para ncBSD.
Clint Pachl

1
No Debian:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi

2
ok uma vez que você instala que, como você criar um "arquivo socket"
Alexander Mills

8

Você pode usar python:

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"

Também C, veja esta resposta .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }para uso fácil do shell: mksock /tmp/test.sock
Tino

0

Eu simplesmente uso netcate fico ouvindo nesse caso:

nc -lkU aSocket.sock

você deve usar o netcat-openbsd . O netcat-traditional não possui um -Uswitch que seja para o soquete do domínio Unix.


-k Força o nc a continuar ouvindo outra conexão após a conclusão da conexão atual. É um erro usar esta opção sem a opção -l. -U Especifica o uso de soquetes do domínio UNIX.
Johan Boulé
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.