कमांड लाइन से यूनिक्स नामांकित सॉकेट बनाएं


29

क्या mkfifo के समान लेकिन डोमेन सॉकेट्स के लिए एक कमांड है?

जवाबों:


21

सॉकेट के लिए mkfifo का कोई सटीक समकक्ष नहीं है, अर्थात ऐसा कोई आदेश नहीं है जो सिर्फ "हैंगिंग" सॉकेट बनाता है। यह ऐतिहासिक कारण के लिए है: सर्वर का फ़ंक्शन बाइंड (), जो फ़ाइल सिस्टम में सॉकेट नाम / इनोड बनाता है, वह विफल हो जाता है यदि नाम पहले से ही उपयोग किया जाता है। दूसरे शब्दों में, सर्वर पहले से मौजूद सॉकेट पर काम नहीं कर सकता।

इसलिए यदि आपने पहले सॉकेट बनाया है, तो इसे पहले सर्वर द्वारा हटाया जाना चाहिए। कोई फायदा नहीं। जैसा कि आप ग्रेगरी के उत्तर के साथ देखते हैं, आप एक सॉकेट बना सकते हैं यदि आप इसके लिए एक सर्वर रखते हैं, जैसे कि नेटकैट। एक बार एक सर्वर चला गया है, पुराने सॉकेट चला गया है। एक नए सर्वर में एक नया सॉकेट है, और सभी ग्राहकों को सॉकेट का नाम समान होने के बावजूद फिर से कनेक्ट करने की आवश्यकता है।


15

सबसे हाल ही में netcat (nc) और इसी तरह के कार्यक्रमों (जहाँ तक मुझे पता है) में डोमेन सॉकेट विकल्प हैं।
और, आप ucspi-unix पर एक नज़र डाल सकते हैं


1
ncबीएसडी पर +1 ।
क्लिंट पच्ल

1
डेबियन पर:# sudo apt-get install netcat-openbsd
डॉ। कौथिर अत्तोची

2
ठीक है एक बार जब आप इसे स्थापित करते हैं, तो आप "सॉकेट फ़ाइल" कैसे बनाते हैं
अलेक्जेंडर मिल्स

8

आप अजगर का उपयोग कर सकते हैं:

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

साथ ही C, इस उत्तर को देखें ।


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }आसान खोल उपयोग के लिए: mksock /tmp/test.sock
Tino

0

मैं netcatऐसे मामले में बस इस्तेमाल करता हूं और सुनता रहता हूं :

nc -lkU aSocket.sock

आपको netcat-openbsd का उपयोग करना चाहिए । netcat- पारंपरिक में -Uस्विच नहीं है जो यूनिक्स डोमेन सॉकेट के लिए है।


-k बलों को अपने वर्तमान कनेक्शन के पूरा होने के बाद दूसरे कनेक्शन के लिए सुनने के लिए एनसी। -L विकल्प के बिना इस विकल्प का उपयोग करना एक त्रुटि है। -U UNIX- डोमेन सॉकेट का उपयोग करने के लिए निर्दिष्ट करता है।
जोहान बोले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.