Buat Unix Named Socket dari Command Line


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.



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 .


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.


-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é
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.