क्या mkfifo के समान लेकिन डोमेन सॉकेट्स के लिए एक कमांड है?
क्या mkfifo के समान लेकिन डोमेन सॉकेट्स के लिए एक कमांड है?
जवाबों:
सॉकेट के लिए mkfifo का कोई सटीक समकक्ष नहीं है, अर्थात ऐसा कोई आदेश नहीं है जो सिर्फ "हैंगिंग" सॉकेट बनाता है। यह ऐतिहासिक कारण के लिए है: सर्वर का फ़ंक्शन बाइंड (), जो फ़ाइल सिस्टम में सॉकेट नाम / इनोड बनाता है, वह विफल हो जाता है यदि नाम पहले से ही उपयोग किया जाता है। दूसरे शब्दों में, सर्वर पहले से मौजूद सॉकेट पर काम नहीं कर सकता।
इसलिए यदि आपने पहले सॉकेट बनाया है, तो इसे पहले सर्वर द्वारा हटाया जाना चाहिए। कोई फायदा नहीं। जैसा कि आप ग्रेगरी के उत्तर के साथ देखते हैं, आप एक सॉकेट बना सकते हैं यदि आप इसके लिए एक सर्वर रखते हैं, जैसे कि नेटकैट। एक बार एक सर्वर चला गया है, पुराने सॉकेट चला गया है। एक नए सर्वर में एक नया सॉकेट है, और सभी ग्राहकों को सॉकेट का नाम समान होने के बावजूद फिर से कनेक्ट करने की आवश्यकता है।
सबसे हाल ही में netcat (nc) और इसी तरह के कार्यक्रमों (जहाँ तक मुझे पता है) में डोमेन सॉकेट विकल्प हैं।
और, आप ucspi-unix पर एक नज़र डाल सकते हैं
# sudo apt-get install netcat-openbsd
आप अजगर का उपयोग कर सकते हैं:
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
मैं netcat
ऐसे मामले में बस इस्तेमाल करता हूं और सुनता रहता हूं :
nc -lkU aSocket.sock
आपको netcat-openbsd का उपयोग करना चाहिए । netcat- पारंपरिक में -U
स्विच नहीं है जो यूनिक्स डोमेन सॉकेट के लिए है।
nc
बीएसडी पर +1 ।