Criar soquete nomeado Unix na linha de comando

29

Existe um comando semelhante ao mkfifo, mas para soquetes de domínio?

benmmurphy
fonte

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.

kubanczyk
fonte
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

Gregory MOUSSAT
fonte
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 .

akostadinov
fonte
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.

Karimai
fonte
-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é