Komut Satırından Unix Adlandırılmış Soket Oluşturma


Yanıtlar:


21

Soket için tam mkfifo eşdeğeri yoktur, yani sadece bir "asılı" soket oluşturan bir komut yoktur. Bu tarihsel bir sebepten dolayıdır: Sunucunun dosya sisteminde bir soket adı / inode oluşturan bind () işlevi, eğer isim kullanılmışsa başarısız olur. Başka bir deyişle, sunucu önceden var olan bir sokette çalışamaz.

Bu yüzden daha önce bir soket oluşturduysanız, öncelikle sunucu tarafından kaldırılması gerekir. Faydasız. Gregory'nin cevabını gördüğünüz gibi, netcat gibi bir sunucu tutarsanız bir soket oluşturabilirsiniz. Bir sunucu gittiğinde, eski soket gider. Yeni bir sunucunun yeni bir soketi vardır ve soketin adı aynı olmasına rağmen tüm istemcilerin yeniden bağlanması gerekir.


15

En yeni netcat (nc) ve benzeri programlar (bildiğim kadarıyla socat) etki alanı yuva seçeneklerine sahiptir.
Başka, ucspi-unix'e bir göz atabilirsin


1
ncBSD için +1 .
Clint Pachl

1
Debian hakkında:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi

2
tamam bir kez bunu yükledikten sonra, nasıl bir "soket dosyası" oluşturabilirsiniz
Alexander Mills

8

Python kullanabilirsiniz:

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

Ayrıca C, bu cevaba bakınız .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }kolay kabuk kullanımı için: mksock /tmp/test.sock
Tino

0

Sadece netcatböyle bir durumda kullanıyorum ve dinliyorum:

nc -lkU aSocket.sock

netcat-openbsd kullanmalısınız . netcat-traditional , -UUnix Domain soketi için olan bir anahtara sahip değildir .


-k Geçerli bağlantı tamamlandıktan sonra nc'yi başka bir bağlantıyı dinlemeye zorlar. -L seçeneği olmadan bu seçeneği kullanmak bir hatadır. -U UNIX etki alanı soketlerini kullanmayı belirtir.
Johan Boulé
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.