अब, यह क्या है?
एक सॉकेट, या "सॉकेट" कई चीजें हो सकती हैं:
सबसे पहले, यह एक विचार मॉडल और एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) है । इसका मतलब है कि आपके पास नियमों का एक समूह है, जिसका आपको पालन करने की आवश्यकता है और कार्यों का एक सेट है जिसका उपयोग आप प्रोग्राम को लिखने के लिए कर सकते हैं, जो कि एक सटीक निर्दिष्ट अनुबंध के अनुसार करते हैं। इस विशेष मामले में, किसी अन्य प्रोग्राम के साथ डेटा का आदान-प्रदान करने का मतलब है।
सॉकेट एपीआई व्यापक रूप से सामान्य रूप से "संचार" के विवरण को सार करता है। यह समझाया जाता है कि आप किसके साथ और कैसे बात करते हैं, सभी एक (लगभग) सुसंगत और समान कुकी-कटर फॉर्म के माध्यम से।
आप अलग-अलग "डोमेन" में सॉकेट बना सकते हैं (जैसे कि "यूनिक्स सॉकेट" या "इंटरनेट सॉकेट") और विभिन्न प्रकार के संचार (उदाहरण के लिए "डेटाग्राम" सॉकेट या "स्ट्रीम" सॉकेट) और विभिन्न ग्राहकों से बात करें। , और सब कुछ ठीक वैसा ही काम करता है (ठीक है, 99%, स्पष्ट रूप से मिनट के अंतर हैं जिन्हें आपको ध्यान में रखना होगा)।
आपको जानने की आवश्यकता नहीं है (और आप जानना भी नहीं चाहते हैं!) चाहे आप उसी कंप्यूटर पर या किसी अन्य कंप्यूटर पर किसी अन्य प्रोग्राम से बात करें, या उन कंप्यूटरों के बीच IPv4 या IPv6 नेटवर्क है, या शायद कुछ अन्य प्रोटोकॉल जो आपने कभी नहीं सुना है।
socket
लाइब्रेरी फ़ंक्शन (या syscall) का नाम भी है जो "सॉकेट " बनाता है , जो एक विशेष प्रकार की फ़ाइल है (यूनिक्स में सब कुछ एक फ़ाइल है)।
यह कैसे तुलना करता है ...
सॉकेट पाइप और नाम पाइप के समान श्रेणी में आते हैं
एक पाइप एक पाठक और एक लेखक के बीच एक ही तरह से संचार का साधन है (दोनों ही प्रोग्राम) एक ही कंप्यूटर पर। यह डेटा की एक धारा का अनुकरण करता है (जैसे टीसीपी)।
यही है, पाइप के दृष्टिकोण से कोई व्यक्तिगत "संदेश" या "डेटा के ब्लॉक" मौजूद नहीं हैं। आप डेटा की किसी भी मात्रा को "एक छोर" में कॉपी कर सकते हैं, और कोई भी व्यक्ति किसी भी राशि के डेटा को पढ़ सकता है (जरूरी नहीं कि एक ही हो, और जरूरी नहीं कि एक ही बार में) "बाइट एंड ऑर्डर" में एक ही बाइट क्रम में हो। में धकेल दिया।
एक नामित पाइप, ठीक है, बस एक पाइप है जो फाइल सिस्टम में एक नाम का मालिक है । यही है, यह कुछ ऐसा है जो एक फ़ाइल की तरह दिखता है और व्यवहार करता है, यह निर्देशिका सूची में दिखाई देता है और आप इसे खोल सकते हैं, इसे लिख सकते हैं, आदि। ध्यान दें कि आप सॉकेट विशेष फ़ाइलें भी बना सकते हैं (जो एक नामित सॉकेट होगा) ।
दूसरी तरफ एक सॉकेट, दो तरह ("डुप्लेक्स") संचार का एक साधन है , जिसका अर्थ है कि आप एक ही सॉकेट से लिख सकते हैं और पढ़ सकते हैं, और आपको दो-तरफ़ा संचार के लिए दो अलग-अलग सॉकेट की आवश्यकता नहीं है।
इसके अलावा, एक सॉकेट एक धारा (एक पाइप के समान) के रूप में कार्य कर सकता है, या यह असतत, अविश्वसनीय संदेश भेज सकता है, या यह असतत, आदेशित संदेश भेज सकता है (किसी भी डोमेन पर पहले दो काम, अंतिम केवल "यूनिक्स डोमेन" पर हो सकता है) )। यह पूरी तरह से अलग कंप्यूटर पर किसी को संदेश भेज सकता है (या स्ट्रीम स्ट्रीम कर सकता है)। एक सॉकेट कुछ शर्तों के तहत एक से कई संचार (मल्टीकास्ट) का भी रूप ले सकता है।
इसे ध्यान में रखते हुए, यह स्पष्ट है कि सॉकेट कुछ अधिक जटिल करते हैं और आम तौर पर पाइप की तुलना में अधिक ओवरहेड होते हैं (जो मूल रूप memcpy
से एक बफर से और एक साधारण से अधिक नहीं होते हैं !), लेकिन यदि आप स्थानीय सॉकेट बनाते हैं (यानी उसी पर) कंप्यूटर), ऑपरेटिंग सिस्टम आमतौर पर एक भारी अनुकूलित फास्ट पथ लागू करता है, इसलिए वास्तव में बहुत अंतर नहीं है।
नेटवर्क के संबंध में कभी-कभी अंतर-प्रक्रिया संचार का उल्लेख किया जाता है
हां, सॉकेट्स अंतर-प्रक्रिया संचार (साझा मेमोरी और पाइप विकल्प के उदाहरण होने का एक संभव तरीका) हैं। सभी एक ही समय में, उन्हें "नेटवर्किंग" के लिए उपयोग किया जा रहा है, जैसा कि ऊपर बताया गया है।