Crear un socket con nombre de Unix desde la línea de comandos

Respuestas:

21

No hay un equivalente exacto de mkfifo para el socket, es decir, no hay un comando que simplemente cree un socket "colgado". Esto es por razones históricas: la función del servidor bind (), la que crea un nombre / inodo de socket en el sistema de archivos, falla si el nombre ya está en uso. En otras palabras, el servidor no puede funcionar en un socket preexistente.

Por lo tanto, si hubiera creado un socket antes, el servidor debería eliminarlo de todos modos primero. Sin beneficio. Como puede ver con la respuesta de Gregory, puede crear un socket SI mantiene un servidor para él, como netcat. Una vez que un servidor se ha ido, el viejo socket se ha ido. Un nuevo servidor tiene un nuevo socket, y todos los clientes necesitan volver a conectarse, a pesar de que el nombre del socket sea idéntico.

kubanczyk
fuente
15

Los programas netcat (nc) más recientes y similares (socat hasta donde yo sé) tienen opciones de socket de dominio.
De lo contrario, puedes echar un vistazo a ucspi-unix

Gregory MOUSSAT
fuente
1
+1 para ncen BSD.
Clint Pachl
1
En Debian:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi
2
ok una vez que instalas eso, ¿cómo creas un "archivo de socket"
Alexander Mills
8

Puedes usar python:

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

También C, mira esta respuesta .

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

Simplemente uso netcaty sigo escuchando en tal caso:

nc -lkU aSocket.sock

deberías usar netcat-openbsd . netcat-traditional no tiene -Uconmutador que sea para socket de dominio Unix.

Karimai
fuente
-k Obliga a nc a seguir escuchando otra conexión después de que se complete su conexión actual. Es un error usar esta opción sin la opción -l. -U Especifica el uso de sockets de dominio UNIX.
Johan Boulé