Buat Unix Named Socket dari Command Line

29

Apakah ada perintah yang mirip dengan mkfifo tetapi untuk soket domain?

benmmurphy
sumber

Jawaban:

21

Tidak ada padanan pasti dari mkfifo untuk soket, yaitu tidak ada perintah yang hanya membuat soket "menggantung". Ini karena alasan historis: fungsi server bind (), yang membuat nama socket / inode dalam sistem file, gagal jika nama tersebut sudah digunakan. Dengan kata lain, server tidak dapat beroperasi pada soket yang sudah ada sebelumnya.

Jadi jika Anda membuat socket lebih awal, itu harus dihapus oleh server terlebih dahulu. Tidak ada manfaatnya Seperti yang Anda lihat dengan jawaban Gregory, Anda dapat membuat soket JIKA Anda menyimpan server untuk itu, seperti netcat. Setelah server hilang, soket lama hilang. Server baru memiliki soket baru, dan semua klien harus terhubung kembali, meskipun nama soketnya sama.

kubanczyk
sumber
15

Netcat terbaru (nc) dan program serupa (socat sejauh yang saya tahu) memiliki opsi soket domain.
Lain, Anda dapat melihat ucspi-unix

Gregory MOUSSAT
sumber
1
+1 untuk ncdi BSD.
Clint Pachl
1
Pada Debian:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi
2
ok setelah Anda menginstalnya, bagaimana Anda membuat "file socket"
Alexander Mills
8

Anda bisa menggunakan python:

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

Juga C, lihat jawaban ini .

akostadinov
sumber
mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }untuk penggunaan shell yang mudah: mksock /tmp/test.sock
Tino
0

Saya hanya menggunakan netcatdan tetap mendengarkan dalam kasus seperti ini:

nc -lkU aSocket.sock

Anda harus menggunakan netcat-openbsd . netcat-traditional tidak memiliki -Usaklar yang untuk soket Unix Domain.

Karimai
sumber
-k Memaksa nc untuk tetap mendengarkan koneksi lain setelah koneksi saat ini selesai. Ini adalah kesalahan untuk menggunakan opsi ini tanpa opsi -l. -U Menentukan untuk menggunakan soket UNIX-domain.
Johan Boulé