क्यों के बारे में, nwildner ने पहले से ही एक उत्कृष्ट उत्तर लिखा था ।
यहाँ मैं केवल कैसे और सापेक्ष पथ उपयोग पर ध्यान केंद्रित करूंगा।
आंतरिक रूप से, जबकि सॉकेट फ़ाइल को नाम से भी देखा जा सकता है (मुझे लगता है), वे आमतौर पर इनोड द्वारा देखे जाते हैं। लिनक्स में, नेट / यूनिक्स / af_unix.cunix_find_socket_byinode()
में परिभाषित फ़ंक्शन द्वारा यह लुकअप सुनिश्चित किया जाता है ।
इसे आसानी से फॉलो किया जा सकता है:
- दो निर्देशिका A / B और बनाएँ ।
- प्रत्येक निर्देशिका के तहत, एक प्रक्रिया को एक ही नाम वाले सॉकेट फाइलों पर सुनें। साथ
socat
आप इस तरह के रूप में एक कमांड का प्रयोग करेंगे:
$ socat UNIX-LISTEN:./my.sock -
- अब A / my.sock को B / और इसके विपरीत ले जाकर सॉकेट फ़ाइलों का आदान-प्रदान करें ।
- अब से, यदि क्लाइंट एप्लिकेशन A / my.sock से कनेक्ट होता है, तो वह सर्वर B से संपर्क करेगा , और यदि वह B / my.sock से कनेक्ट होता है, तो वह सर्वर A से संपर्क करेगा (ध्यान दें कि संचार समाप्त होने पर, सर्वर प्रक्रिया हो सकती है वैध रूप से वह हटाएं जो वह अपनी सॉकेट फ़ाइल समझता है)।
मैंने इस व्यवहार को मुट्ठी भर यूनिक्स प्रणालियों (लिनक्स डेबियन, फ्रीबीएसडी और ओपनइंडियाना को कुछ विविधता प्राप्त करने के लिए) पर जांचा, इसलिए यह व्यवहार कम से कम व्यापक-प्रसार वाला प्रतीत होता है, यदि मानक नहीं है।
निरपेक्ष रास्तों का उपयोग आमतौर पर क्लाइंट और सर्वर प्रक्रियाओं के बीच एक सम्मेलन के रूप में किया जाता है, क्योंकि क्लाइंट प्रक्रिया अन्यथा सर्वर के साथ प्रारंभिक संचार स्थापित करने का तरीका नहीं जान सकती है।
हालाँकि, यदि यह प्रारंभिक संचार कोई समस्या नहीं है, तो इसलिए सॉकेट फ़ाइलों के निर्माण के लिए सापेक्ष पथों का उपयोग करना सुरक्षित लगता है, जब सॉकेट फ़ाइल स्थान सीधे सर्वर प्रक्रिया द्वारा नियंत्रित नहीं होता है, तो पथ लंबाई के मुद्दों से बचने की अनुमति देता है।