बर्कले सॉकेट: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Inter-process communication API}} बर्कले सॉकेट्स इंटरनेट सॉकेट्स और यूनिक्स...")
 
No edit summary
Line 1: Line 1:
{{Short description|Inter-process communication API}}
{{Short description|Inter-process communication API}}


बर्कले सॉकेट्स [[इंटरनेट सॉकेट]]्स और [[यूनिक्स डोमेन सॉकेट]]्स के लिए एक [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई) है, जिसका इस्तेमाल [[अंतःप्रक्रम संचार]] (आईपीसी) के लिए किया जाता है। यह आमतौर पर लिंक करने योग्य मॉड्यूल के पुस्तकालय (कंप्यूटिंग) के रूप में कार्यान्वित किया जाता है। इसकी शुरुआत [[बर्कले सॉफ्टवेयर वितरण]]#4BSD|4.2BSD यूनिक्स ऑपरेटिंग सिस्टम के इतिहास से हुई, जिसे 1983 में जारी किया गया था।
बर्कले सॉकेट्स [[इंटरनेट सॉकेट]]्स और [[यूनिक्स डोमेन सॉकेट]]्स के लिए एक [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई) है, जिसका प्रयोग [[अंतःप्रक्रम संचार]] (आईपीसी) के लिए किया जाता है। यह सामान्यतः लिंक करने योग्य मॉड्यूल के पुस्तकालय (कंप्यूटिंग) के रूप में कार्यान्वित किया जाता है। इसका प्रारंभ [[बर्कले सॉफ्टवेयर वितरण]] '''#4बीएसडी|''' 4.2बीएसडी यूनिक्स ऑपरेटिंग प्रणाली के इतिहास से हुई, जिसे 1983 में प्रयुक्त किया गया था।


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


बर्कले सॉकेट एक वास्तविक मानक से थोड़ा संशोधन के साथ विकसित हुए हैं।''वास्तविक'' मानक [[POSIX]] विनिर्देश के एक घटक में। POSIX सॉकेट्स शब्द अनिवार्य रूप से 'बर्कले सॉकेट्स' का पर्याय है, लेकिन उन्हें BSD सॉकेट्स के रूप में भी जाना जाता है, जो बर्कले सॉफ्टवेयर डिस्ट्रीब्यूशन में पहले कार्यान्वयन को स्वीकार करते हैं।
बर्कले सॉकेट एक वास्तविक मानक से थोड़ा संशोधन के साथ विकसित हुए हैं।वास्तविक मानक [[POSIX|पॉज़िक्स]] विनिर्देश के एक घटक में। पॉज़िक्स सॉकेट्स शब्द अनिवार्य रूप से 'बर्कले सॉकेट्स' का पर्याय है, लेकिन उन्हें बीएसडी सॉकेट्स के रूप में भी जाना जाता है, जो बर्कले सॉफ्टवेयर वितरण में पहले कार्यान्वयन को स्वीकार करते हैं।


== इतिहास और कार्यान्वयन ==
== इतिहास और कार्यान्वयन ==
बर्कले सॉकेट्स की उत्पत्ति 4.2BSD [[यूनिक्स]] [[ऑपरेटिंग सिस्टम]] के साथ हुई, जिसे 1983 में एक प्रोग्रामिंग इंटरफेस के रूप में जारी किया गया था। हालांकि, 1989 तक, कैलिफोर्निया विश्वविद्यालय, बर्कले ऑपरेटिंग सिस्टम और नेटवर्किंग लाइब्रेरी के संस्करणों को AT&T Corporation के स्वामित्व वाली यूनिक्स की लाइसेंसिंग बाधाओं से मुक्त नहीं कर सका।
बर्कले सॉकेट्स की उत्पत्ति 4.2बीएसडी [[यूनिक्स]] [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] के साथ हुई, जिसे 1983 में एक प्रोग्रामिंग इंटरफेस के रूप में प्रयुक्त किया गया था। चूँकि, 1989 तक, कैलिफोर्निया विश्वविद्यालय, बर्कले ऑपरेटिंग प्रणाली और नेटवर्किंग लाइब्रेरी के संस्करणों को AT&T कॉर्पोरेशन के स्वामित्व वाली यूनिक्स की लाइसेंसिंग बाधाओं से मुक्त नहीं कर सका।


सभी आधुनिक ऑपरेटिंग सिस्टम बर्कले सॉकेट इंटरफ़ेस के एक संस्करण को लागू करते हैं। यह [[इंटरनेट]] में चल रहे अनुप्रयोगों के लिए मानक इंटरफ़ेस बन गया। यहां तक ​​कि असंबद्ध डेवलपर्स द्वारा बनाए गए MS Windows के लिए [[Winsock]] कार्यान्वयन भी मानक का बारीकी से पालन करता है।
सभी आधुनिक ऑपरेटिंग प्रणाली बर्कले सॉकेट इंटरफ़ेस के एक संस्करण को प्रयुक्त करते हैं। यह [[इंटरनेट]] में चल रहे अनुप्रयोगों के लिए मानक इंटरफ़ेस बन गया। यहां तक ​​कि असंबद्ध डेवलपर्स द्वारा बनाए गए एमएस विंडोज के लिए [[Winsock|विनसॉक]] कार्यान्वयन भी मानक का बारीकी से पालन करता है।


बीएसडी सॉकेट एपीआई [[सी (प्रोग्रामिंग भाषा)]] में लिखा गया है। अधिकांश अन्य प्रोग्रामिंग लैंग्वेज समान इंटरफेस प्रदान करती हैं, जिन्हें आमतौर पर C API पर आधारित [[रैपर लाइब्रेरी]] के रूप में लिखा जाता है।<ref>E. g. in the [[Ruby (programming language)|Ruby programming language]] [http://www.ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket.html ruby-doc::Socket]</ref>
बीएसडी सॉकेट एपीआई [[सी (प्रोग्रामिंग भाषा)]] में लिखा गया है। अधिकांश अन्य प्रोग्रामिंग भाषा समान इंटरफेस प्रदान करती हैं, जिन्हें सामान्यतः C API पर आधारित [[रैपर लाइब्रेरी]] के रूप में लिखा जाता है।<ref>E. g. in the [[Ruby (programming language)|Ruby programming language]] [http://www.ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket.html ruby-doc::Socket]</ref>




=== बीएसडी और पॉज़िक्स सॉकेट ===
=== बीएसडी और पॉज़िक्स सॉकेट ===
जैसा कि बर्कले सॉकेट एपीआई विकसित हुआ और अंततः POSIX सॉकेट एपीआई निकला,<ref>{{cite web|url=http://www.opengroup.org/onlinepubs/9699919799/functions/contents.html |title=— POSIX.1-2008 specification |publisher=Opengroup.org |access-date=2012-07-26}}</ref> कुछ कार्यों को बहिष्कृत या हटा दिया गया और अन्य द्वारा प्रतिस्थापित किया गया। POSIX API को भी पुनर्वित्त (कंप्यूटिंग) के लिए डिज़ाइन किया गया है और IPv6 का समर्थन करता है।
जैसा कि बर्कले सॉकेट एपीआई विकसित हुआ और अंततः पॉज़िक्स सॉकेट एपीआई निकला,<ref>{{cite web|url=http://www.opengroup.org/onlinepubs/9699919799/functions/contents.html |title=— POSIX.1-2008 specification |publisher=Opengroup.org |access-date=2012-07-26}}</ref> कुछ कार्यों को बहिष्कृत या हटा दिया गया और अन्य द्वारा प्रतिस्थापित किया गया। पॉज़िक्स API को भी पुनर्वित्त (कंप्यूटिंग) के लिए डिज़ाइन किया गया है और IPv6 का समर्थन करता है।


{|class="wikitable"
{|class="wikitable"
|-
|-
!Action
!कार्रवाई
!BSD
!बीएसडी
!POSIX
!पॉज़िक्स
|-
|-
|Conversion from text address to packed address
|टेक्स्ट एड्रेस से पैक्ड एड्रेस में रूपांतरण
|inet_aton
|inet_aton
|inet_pton
|inet_pton
|-
|-
|Conversion from packed address to text address
|पैक किए गए पते से टेक्स्ट पते में रूपांतरण
|inet_ntoa
|inet_ntoa
|inet_ntop
|inet_ntop
|-
|-
|Forward lookup for host name/service
|आयोजकों नाम/सेवा के लिए फॉरवर्ड लुकअप
|gethostbyname, gethostbyaddr, getservbyname, getservbyport
|gethostbyname, gethostbyaddr, getservbyname, getservbyport
|[[getaddrinfo]]
|[[getaddrinfo]]
|-
|-
|Reverse lookup for host name/service
|आयोजकों नाम/सेवा के लिए रिवर्स लुकअप
|gethostbyaddr, getservbyport
|gethostbyaddr, getservbyport
|[[getnameinfo]]
|[[getnameinfo]]
Line 45: Line 45:
[[स्ट्रीम (नेटवर्किंग एपीआई)]] आधारित [[ ट्रांसपोर्ट लेयर इंटरफ़ेस ]] (टीएलआई) एपीआई सॉकेट एपीआई के लिए एक विकल्प प्रदान करता है। टीएलआई एपीआई प्रदान करने वाली कई प्रणालियां बर्कले सॉकेट एपीआई भी प्रदान करती हैं।
[[स्ट्रीम (नेटवर्किंग एपीआई)]] आधारित [[ ट्रांसपोर्ट लेयर इंटरफ़ेस ]] (टीएलआई) एपीआई सॉकेट एपीआई के लिए एक विकल्प प्रदान करता है। टीएलआई एपीआई प्रदान करने वाली कई प्रणालियां बर्कले सॉकेट एपीआई भी प्रदान करती हैं।


गैर-यूनिक्स सिस्टम अक्सर बर्कले सॉकेट एपीआई को अनुवाद परत के साथ मूल नेटवर्किंग एपीआई में उजागर करते हैं। [[बेल लैब्स से प्लान 9]]<ref>{{cite web|url=http://doc.cat-v.org/plan_9/4th_edition/papers/net/|title=The Organization of Networks in Plan 9}}</ref> और [[जीनोड]]<ref>{{cite web|url=https://genode.org/documentation/release-notes/17.02#Linux_TCP_IP_stack_as_VFS_plugin|title=Linux TCP/IP stack as VFS plugin}}</ref> फाइल-डिस्क्रिप्टर के बजाय नियंत्रण फाइलों के साथ फाइल-सिस्टम एपीआई का उपयोग करें।
गैर-यूनिक्स प्रणाली अधिकांशतः बर्कले सॉकेट एपीआई को अनुवाद परत के साथ मूल नेटवर्किंग एपीआई में साक्ष्य करते हैं। [[बेल लैब्स से प्लान 9]]<ref>{{cite web|url=http://doc.cat-v.org/plan_9/4th_edition/papers/net/|title=The Organization of Networks in Plan 9}}</ref> और [[जीनोड]]<ref>{{cite web|url=https://genode.org/documentation/release-notes/17.02#Linux_TCP_IP_stack_as_VFS_plugin|title=Linux TCP/IP stack as VFS plugin}}</ref> फाइल-डिस्क्रिप्टर के अतिरिक्त नियंत्रण फाइलों के साथ फाइल-प्रणाली एपीआई का उपयोग करें।


== हैडर फ़ाइलें ==
== हैडर फ़ाइलें ==
बर्कले सॉकेट इंटरफ़ेस को कई शीर्षलेख फ़ाइलों में परिभाषित किया गया है। कार्यान्वयन के बीच इन फ़ाइलों के नाम और सामग्री थोड़ी भिन्न होती है। सामान्य तौर पर, इनमें शामिल हैं:
बर्कले सॉकेट इंटरफ़ेस को कई शीर्षलेख फ़ाइलों में परिभाषित किया गया है। कार्यान्वयन के बीच इन फ़ाइलों के नाम और सामग्री थोड़ी भिन्न होती है। सामान्यतः, इनमें सम्मिलित हैं:
{| class=wikitable
{| class=wikitable
!File || Description
!फाइल || विवरण
|-
|-
|sys/socket.h || Core socket functions and data structures.
|sys/socket.h || Core socket functions and data structures.
Line 64: Line 64:




== सॉकेट एपीआई फ़ंक्शंस ==
== सॉकेट एपीआई फलन ==
[[File:InternetSocketBasicDiagram zhtw.png|thumb|right|ट्रांसमिशन कंट्रोल प्रोटोकॉल (टीसीपी) के साथ सॉकेट का उपयोग कर क्लाइंट-सर्वर लेनदेन का प्रवाह आरेख।]]बर्कले सॉकेट एपीआई आमतौर पर निम्नलिखित कार्य प्रदान करता है:
[[File:InternetSocketBasicDiagram zhtw.png|thumb|right|ट्रांसमिशन कंट्रोल प्रोटोकॉल (टीसीपी) के साथ सॉकेट का उपयोग कर क्लाइंट-सर्वर लेनदेन का प्रवाह आरेख।]]बर्कले सॉकेट एपीआई सामान्यतः निम्नलिखित कार्य प्रदान करता है:
* सॉकेट () एक निश्चित प्रकार का एक नया सॉकेट बनाता है, जिसे एक पूर्णांक संख्या द्वारा पहचाना जाता है, और इसके लिए सिस्टम संसाधन आवंटित करता है।
* सॉकेट () एक निश्चित प्रकार का एक नया सॉकेट बनाता है, जिसे एक पूर्णांक संख्या द्वारा पहचाना जाता है, और इसके लिए प्रणाली संसाधन आवंटित करता है।
* बाइंड () आमतौर पर सर्वर साइड पर उपयोग किया जाता है, और सॉकेट को सॉकेट एड्रेस स्ट्रक्चर, यानी एक निर्दिष्ट स्थानीय आईपी एड्रेस और पोर्ट नंबर के साथ जोड़ता है।
* बाइंड () सामान्यतः सर्वर साइड पर उपयोग किया जाता है, और सॉकेट को सॉकेट एड्रेस संरचना, यानी एक निर्दिष्ट स्थानीय आईपी एड्रेस और पोर्ट नंबर के साथ जोड़ता है।
* सुनो () सर्वर साइड पर उपयोग किया जाता है, और एक बाध्य टीसीपी सॉकेट को सुनने की स्थिति में प्रवेश करने का कारण बनता है।
* सुनो () सर्वर साइड पर उपयोग किया जाता है, और एक बाध्य टीसीपी सॉकेट को लिसेन की स्थिति में प्रवेश करने का कारण बनता है।
* कनेक्ट() क्लाइंट साइड पर प्रयोग किया जाता है, और सॉकेट को एक मुफ्त स्थानीय पोर्ट नंबर असाइन करता है। टीसीपी सॉकेट के मामले में, यह एक नया टीसीपी कनेक्शन स्थापित करने का प्रयास करता है।
* कनेक्ट() क्लाइंट साइड पर प्रयोग किया जाता है, और सॉकेट को एक मुफ्त स्थानीय पोर्ट नंबर असाइन करता है। टीसीपी सॉकेट के स्थितियों में, यह एक नया टीसीपी कनेक्शन स्थापित करने का प्रयास करता है।
* स्वीकार करें () का उपयोग सर्वर साइड पर किया जाता है। यह रिमोट क्लाइंट से एक नया टीसीपी कनेक्शन बनाने के लिए आने वाले प्रयास को स्वीकार करता है, और इस कनेक्शन के सॉकेट एड्रेस जोड़ी से जुड़ा एक नया सॉकेट बनाता है।
* स्वीकार करें () का उपयोग सर्वर साइड पर किया जाता है। यह रिमोट क्लाइंट से एक नया टीसीपी कनेक्शन बनाने के लिए आने वाले प्रयास को स्वीकार करता है, और इस कनेक्शन के सॉकेट एड्रेस जोड़ी से जुड़ा एक नया सॉकेट बनाता है।
* सेंड (), आरईवी (), सेंडटो (), और रिकवफ्रॉम () का उपयोग डेटा भेजने और प्राप्त करने के लिए किया जाता है। मानक फ़ंक्शंस राइट () और रीड () का भी उपयोग किया जा सकता है।
* सेंड (), आरईवी (), सेंडटो (), और रिकवफ्रॉम () का उपयोग डेटा भेजने और प्राप्त करने के लिए किया जाता है। मानक फलन राइट () और रीड () का भी उपयोग किया जा सकता है।
* बंद () सिस्टम को सॉकेट के लिए आवंटित संसाधनों को जारी करने का कारण बनता है। टीसीपी के मामले में, कनेक्शन समाप्त कर दिया गया है।
* बंद () प्रणाली को सॉकेट के लिए आवंटित संसाधनों को प्रयुक्त करने का कारण बनता है। टीसीपी के स्थितियों में, कनेक्शन समाप्त कर दिया गया है।
* gethostbyname() और gethostbyaddr() का उपयोग होस्ट नाम और पते को हल करने के लिए किया जाता है। IPv4 केवल।
* gethostbyname() और gethostbyaddr() का उपयोग आयोजकों नाम और पते को हल करने के लिए किया जाता है। IPv4 केवल।
* getaddrinfo() और freeaddrinfo() का उपयोग होस्ट नाम और पते को हल करने के लिए किया जाता है। आईपीवी4, आईपीवी6.
* getaddrinfo() और freeaddrinfo() का उपयोग आयोजकों नाम और पते को हल करने के लिए किया जाता है। IPv4, IPv6.
* चयन () का उपयोग निलंबित करने के लिए किया जाता है, सॉकेट्स की एक या अधिक प्रदान की गई सूची को पढ़ने के लिए तैयार होने, लिखने के लिए तैयार होने या त्रुटियों के लिए प्रतीक्षा करने के लिए।
* चयन () का उपयोग निलंबित करने के लिए किया जाता है, सॉकेट्स की एक या अधिक प्रदान की गई सूची को पढ़ने के लिए तैयार होने, लिखने के लिए तैयार होने या त्रुटियों के लिए प्रतीक्षा करने के लिए।
* पोल () का उपयोग सॉकेट के सेट में सॉकेट की स्थिति की जांच के लिए किया जाता है। यह देखने के लिए सेट का परीक्षण किया जा सकता है कि क्या कोई सॉकेट लिखा जा सकता है, पढ़ा जा सकता है या कोई त्रुटि हुई है या नहीं।
* पोल () का उपयोग सॉकेट के सेट में सॉकेट की स्थिति की जांच के लिए किया जाता है। यह देखने के लिए सेट का परीक्षण किया जा सकता है कि क्या कोई सॉकेट लिखा जा सकता है, पढ़ा जा सकता है या कोई त्रुटि हुई है या नहीं।
Line 81: Line 81:


=== सॉकेट ===
=== सॉकेट ===
फ़ंक्शन सॉकेट () संचार के लिए एक समापन बिंदु बनाता है और सॉकेट के लिए फ़ाइल डिस्क्रिप्टर देता है। यह तीन तर्कों का उपयोग करता है:
फलन सॉकेट () संचार के लिए एक समापन बिंदु बनाता है और सॉकेट के लिए फ़ाइल डिस्क्रिप्टर देता है। यह तीन तर्कों का उपयोग करता है:
* {{mono|<var>domain</var>}}, जो निर्मित सॉकेट के प्रोटोकॉल परिवार को निर्दिष्ट करता है। उदाहरण के लिए:
* {{mono|<var>domain</var>}}, जो निर्मित सॉकेट के प्रोटोकॉल परिवार को निर्दिष्ट करता है। उदाहरण के लिए:
**{{mono|AF_INET}} नेटवर्क प्रोटोकॉल [[IPv4]] के लिए (केवल IPv4)
**{{mono|AF_INET}} नेटवर्क प्रोटोकॉल [[IPv4]] के लिए (केवल IPv4)
** {{mono|AF_INET6}} [[IPv6]] के लिए (और कुछ मामलों में, IPv4 के साथ [[पिछड़ा संगत]])
** {{mono|AF_INET6}} [[IPv6]] के लिए (और कुछ स्थितियों में, IPv4 के साथ [[पिछड़ा संगत]])
** {{mono|AF_UNIX}} स्थानीय सॉकेट के लिए (एक विशेष फाइलसिस्टम नोड का उपयोग करके)
** {{mono|AF_UNIX}} स्थानीय सॉकेट के लिए (एक विशेष फाइलप्रणाली नोड का उपयोग करके)
* {{mono|<var>type</var>}}, में से एक:
* {{mono|<var>type</var>}}, में से एक:
** {{mono|SOCK_STREAM}} (विश्वसनीय स्ट्रीम-उन्मुख सेवा या [[स्ट्रीम सॉकेट]])
** {{mono|SOCK_STREAM}} (विश्वसनीय स्ट्रीम-उन्मुख सेवा या [[स्ट्रीम सॉकेट]])
Line 91: Line 91:
** {{mono|SOCK_SEQPACKET}} (विश्वसनीय अनुक्रमित पैकेट सेवा)
** {{mono|SOCK_SEQPACKET}} (विश्वसनीय अनुक्रमित पैकेट सेवा)
** {{mono|SOCK_RAW}} (नेटवर्क परत के ऊपर अपरिष्कृत प्रोटोकॉल)
** {{mono|SOCK_RAW}} (नेटवर्क परत के ऊपर अपरिष्कृत प्रोटोकॉल)
* {{mono|<var>protocol</var>}} उपयोग करने के लिए वास्तविक परिवहन प्रोटोकॉल निर्दिष्ट करना। सबसे आम हैं ट्रांसमिशन कंट्रोल प्रोटोकॉल|{{mono|IPPROTO_TCP}}, एससीटीपी |{{mono|IPPROTO_SCTP}}, उपयोगकर्ता डेटाग्राम प्रोटोकॉल |{{mono|IPPROTO_UDP}}, डीसीसीपी|{{mono|IPPROTO_DCCP}}. ये प्रोटोकॉल फ़ाइल netinet/in.h में निर्दिष्ट हैं। मूल्य {{mono|0}} का उपयोग चयनित डोमेन और प्रकार से एक डिफ़ॉल्ट प्रोटोकॉल का चयन करने के लिए किया जा सकता है।
* {{mono|<var>protocol</var>}} उपयोग करने के लिए वास्तविक परिवहन प्रोटोकॉल निर्दिष्ट करना। सबसे आम हैं ट्रांसमिशन कंट्रोल प्रोटोकॉल |{{mono|IPPROTO_TCP}}, '''एससीटीपी |'''{{mono|IPPROTO_SCTP}}, '''उपयोगकर्ता डेटाग्राम प्रोटोकॉल''' |{{mono|IPPROTO_UDP}}, '''डीसीसीपी |'''{{mono|IPPROTO_DCCP}}. ये प्रोटोकॉल फ़ाइल netinet/in.h में निर्दिष्ट हैं। मूल्य {{mono|0}} का उपयोग चयनित डोमेन और प्रकार से एक डिफ़ॉल्ट प्रोटोकॉल का चयन करने के लिए किया जा सकता है।


समारोह लौटता है {{mono|-1}} अगर कोई त्रुटि हुई। अन्यथा, यह नए असाइन किए गए डिस्क्रिप्टर का प्रतिनिधित्व करने वाला एक पूर्णांक देता है।
फलन लौटता है {{mono|-1}} अगर कोई त्रुटि हुई। अन्यथा, यह नए असाइन किए गए डिस्क्रिप्टर का प्रतिनिधित्व करने वाला एक पूर्णांक देता है।


=== बाइंड ===
=== बाइंड ===
बाइंड () एक सॉकेट को एक पते से जोड़ता है। जब सॉकेट() के साथ सॉकेट बनाया जाता है, तो इसे केवल प्रोटोकॉल परिवार दिया जाता है, लेकिन कोई पता नहीं दिया जाता है। सॉकेट अन्य मेजबानों से कनेक्शन स्वीकार कर सकता है इससे पहले यह सहयोग किया जाना चाहिए। समारोह में तीन तर्क हैं:
बाइंड () एक सॉकेट को एक पते से जोड़ता है। जब सॉकेट() के साथ सॉकेट बनाया जाता है, तो इसे केवल प्रोटोकॉल परिवार दिया जाता है, लेकिन कोई पता नहीं दिया जाता है। सॉकेट अन्य आयोजकों से कनेक्शन स्वीकार कर सकता है इससे पहले यह सहयोग किया जाना चाहिए। फलन में तीन तर्क हैं:
*<var>sockfd</var>, सॉकेट का प्रतिनिधित्व करने वाला एक विवरणक
*<var>sockfd</var>, सॉकेट का प्रतिनिधित्व करने वाला एक विवरणक
*<var>my_addr</var>, sockaddr संरचना के लिए एक संकेतक जो बाइंड किए जाने वाले पते का प्रतिनिधित्व करता है।
*<var>my_addr</var>, sockaddr संरचना के लिए एक संकेतक जो बाइंड किए जाने वाले पते का प्रतिनिधित्व करता है।
Line 102: Line 102:
बाइंड () सफलता पर 0 और -1 त्रुटि होने पर रिटर्न देता है।
बाइंड () सफलता पर 0 और -1 त्रुटि होने पर रिटर्न देता है।


=== सुनो ===
=== लिसेन ===
सॉकेट को एक पते से जोड़ने के बाद, <var>listen()</var> इसे इनकमिंग कनेक्शन के लिए तैयार करता है। हालांकि, यह केवल स्ट्रीम-ओरिएंटेड (कनेक्शन-ओरिएंटेड) डेटा मोड के लिए आवश्यक है, यानी, सॉकेट प्रकार (<var>SOCK_STREAM</var>, <var>SOCK_SEQPACKET</var>) के लिए। <var>listen()</var> को दो तर्कों की आवश्यकता है:
सॉकेट को एक पते से जोड़ने के बाद, <var>listen()</var> इसे इनकमिंग कनेक्शन के लिए तैयार करता है। चूँकि, यह केवल स्ट्रीम-ओरिएंटेड (कनेक्शन-ओरिएंटेड) डेटा मोड के लिए आवश्यक है, यानी, सॉकेट प्रकार (<var>SOCK_STREAM</var>, <var>SOCK_SEQPACKET</var>) के लिए। <var>listen()</var> को दो तर्कों की आवश्यकता है:
* <var>sockfd</var>, एक मान्य सॉकेट डिस्क्रिप्टर।
* <var>sockfd</var>, एक मान्य सॉकेट डिस्क्रिप्टर।
* <var>बैकलॉग</var>, लंबित कनेक्शनों की संख्या का प्रतिनिधित्व करने वाला एक पूर्णांक जिसे किसी भी समय कतारबद्ध किया जा सकता है। ऑपरेटिंग सिस्टम आमतौर पर इस मान पर एक कैप लगाता है।
* <var>बैकलॉग</var>, लंबित कनेक्शनों की संख्या का प्रतिनिधित्व करने वाला एक पूर्णांक जिसे किसी भी समय कतारबद्ध किया जा सकता है। ऑपरेटिंग प्रणाली सामान्यतः इस मान पर एक कैप लगाता है।
एक बार एक कनेक्शन स्वीकार कर लेने के बाद, इसे हटा दिया जाता है। सफल होने पर, 0 लौटाया जाता है। यदि कोई त्रुटि होती है, तो -1 वापस आ जाता है।
एक बार एक कनेक्शन स्वीकार कर लेने के बाद, इसे हटा दिया जाता है। सफल होने पर, 0 लौटाया जाता है। यदि कोई त्रुटि होती है, तो -1 वापस आ जाता है।


=== स्वीकार करें ===
=== स्वीकार करें ===
जब कोई एप्लिकेशन अन्य होस्ट से स्ट्रीम-ओरिएंटेड कनेक्शन के लिए सुन रहा होता है, तो उसे ऐसी घटनाओं के बारे में सूचित किया जाता है (cf. सेलेक्ट (यूनिक्स) | सेलेक्ट () फ़ंक्शन) और फ़ंक्शन स्वीकार () का उपयोग करके कनेक्शन को इनिशियलाइज़ करना चाहिए। यह प्रत्येक कनेक्शन के लिए एक नया सॉकेट बनाता है और कनेक्शन को सुनने की कतार से हटा देता है। समारोह में निम्नलिखित तर्क हैं:
जब कोई एप्लिकेशन अन्य आयोजकों से स्ट्रीम-ओरिएंटेड कनेक्शन के लिए सुन रहा होता है, तो उसे ऐसी घटनाओं के बारे में सूचित किया जाता है (cf. सेलेक्ट (यूनिक्स) | सेलेक्ट () फलन) और फलन स्वीकार () का उपयोग करके कनेक्शन को प्रारंभिककरण करना चाहिए। यह प्रत्येक कनेक्शन के लिए एक नया सॉकेट बनाता है और कनेक्शन को लिसेन की कतार से हटा देता है। फलन में निम्नलिखित तर्क हैं:
* <var>sockfd</var>, लिसनिंग सॉकेट का डिस्क्रिप्टर जिसमें कनेक्शन कतारबद्ध है।
* <var>sockfd</var>, लिसनिंग सॉकेट का डिस्क्रिप्टर जिसमें कनेक्शन कतारबद्ध है।
* <var>cliaddr</var>, क्लाइंट के पते की जानकारी प्राप्त करने के लिए sockaddr संरचना का सूचक।
* <var>cliaddr</var>, क्लाइंट के पते की जानकारी प्राप्त करने के लिए sockaddr संरचना का सूचक।
* <var>addrlen</var>, एक socklen_t स्थान के लिए एक सूचक जो स्वीकार करने के लिए पास किए गए क्लाइंट पता संरचना के आकार को निर्दिष्ट करता है ()। जब स्वीकार () रिटर्न होता है, तो इस स्थान में संरचना का आकार (बाइट्स में) होता है।
* <var>addrlen</var>, एक socklen_t स्थान के लिए एक सूचक जो स्वीकार करने के लिए पास किए गए क्लाइंट पता संरचना के आकार को निर्दिष्ट करता है ()। जब स्वीकार () रिटर्न होता है, तो इस स्थान में संरचना का आकार (बाइट्स में) होता है।


स्वीकार करें () स्वीकृत कनेक्शन के लिए नया सॉकेट डिस्क्रिप्टर लौटाता है, या त्रुटि होने पर मान -1 देता है। दूरस्थ होस्ट के साथ आगे के सभी संचार अब इस नए सॉकेट के माध्यम से होते हैं।
स्वीकार करें () स्वीकृत कनेक्शन के लिए नया सॉकेट डिस्क्रिप्टर लौटाता है, या त्रुटि होने पर मान -1 देता है। दूरस्थ आयोजकों के साथ आगे के सभी संचार अब इस नए सॉकेट के माध्यम से होते हैं।


डेटाग्राम सॉकेट्स को स्वीकार () द्वारा प्रसंस्करण की आवश्यकता नहीं होती है क्योंकि रिसीवर तुरंत सुनने वाले सॉकेट का उपयोग करके अनुरोध का जवाब दे सकता है।
डेटाग्राम सॉकेट्स को स्वीकार () द्वारा प्रसंस्करण की आवश्यकता नहीं होती है क्योंकि रिसीवर तुरंत लिसेन वाले सॉकेट का उपयोग करके अनुरोध का उत्तर दे सकता है।


=== कनेक्ट करें ===
=== कनेक्ट करें ===
कनेक्ट () एक सॉकेट के माध्यम से अपने पते द्वारा पहचाने गए एक विशिष्ट दूरस्थ होस्ट के लिए एक सीधा संचार लिंक स्थापित करता है, जिसे उसके फाइल डिस्क्रिप्टर द्वारा पहचाना जाता है।
कनेक्ट () एक सॉकेट के माध्यम से अपने पते द्वारा पहचाने गए एक विशिष्ट दूरस्थ आयोजकों के लिए एक सीधा संचार लिंक स्थापित करता है, जिसे उसके फाइल डिस्क्रिप्टर द्वारा पहचाना जाता है।


[[कनेक्शन-उन्मुख संचार]] | कनेक्शन-उन्मुख प्रोटोकॉल का उपयोग करते समय, यह एक कनेक्शन स्थापित करता है। कुछ प्रकार के प्रोटोकॉल कनेक्शन रहित होते हैं, विशेष रूप से उपयोगकर्ता [[डेटाग्राम प्रोटेकॉलका उपयोग करें]] कनेक्शन रहित प्रोटोकॉल के साथ प्रयोग किया जाता है, तो कनेक्ट डेटा भेजने और प्राप्त करने के लिए रिमोट एड्रेस को परिभाषित करता है, जिससे भेजने और रिकव जैसे कार्यों का उपयोग करने की अनुमति मिलती है। इन मामलों में, कनेक्ट फ़ंक्शन अन्य स्रोतों से डेटाग्राम प्राप्त करने से रोकता है।
[[कनेक्शन-उन्मुख संचार]] '''| कनेक्शन-उन्मुख''' प्रोटोकॉल का उपयोग करते समय, यह एक कनेक्शन स्थापित करता है। कुछ प्रकार के प्रोटोकॉल कनेक्शन रहित होते हैं, विशेष रूप से उपयोगकर्ता [[डेटाग्राम प्रोटेकॉलका उपयोग करें|डेटाग्राम प्रोटेकॉल का उपयोग करें]] कनेक्शन रहित प्रोटोकॉल के साथ प्रयोग किया जाता है, तो कनेक्ट डेटा भेजने और प्राप्त करने के लिए रिमोट एड्रेस को परिभाषित करता है, जिससे भेजने और रिकव जैसे कार्यों का उपयोग करने की अनुमति मिलती है। इन स्थितियों में, कनेक्ट फलन अन्य स्रोतों से डेटाग्राम प्राप्त करने से रोकता है।


कनेक्ट () त्रुटि कोड का प्रतिनिधित्व करने वाला एक पूर्णांक देता है: 0 सफलता का प्रतिनिधित्व करता है, जबकि -1 एक त्रुटि का प्रतिनिधित्व करता है। ऐतिहासिक रूप से, बीएसडी-व्युत्पन्न प्रणालियों में, सॉकेट डिस्क्रिप्टर की स्थिति अपरिभाषित होती है यदि कनेक्ट करने के लिए कॉल विफल हो जाती है (जैसा कि यह एकल यूनिक्स विशिष्टता में निर्दिष्ट है), इस प्रकार, पोर्टेबल एप्लिकेशन को सॉकेट डिस्क्रिप्टर को तुरंत बंद करना चाहिए और एक नया डिस्क्रिप्टर प्राप्त करना चाहिए सॉकेट (), मामले में कनेक्ट करने के लिए कॉल () विफल रहता है।{{sfn|Stevens|Rago|2013|p=607}}
कनेक्ट () त्रुटि कोड का प्रतिनिधित्व करने वाला एक पूर्णांक देता है: 0 सफलता का प्रतिनिधित्व करता है, जबकि -1 एक त्रुटि का प्रतिनिधित्व करता है। ऐतिहासिक रूप से, बीएसडी-व्युत्पन्न प्रणालियों में, सॉकेट डिस्क्रिप्टर की स्थिति अपरिभाषित होती है यदि कनेक्ट करने के लिए कॉल विफल हो जाती है (जैसा कि यह एकल यूनिक्स विशिष्टता में निर्दिष्ट है), इस प्रकार, पोर्टेबल एप्लिकेशन को सॉकेट डिस्क्रिप्टर को तुरंत बंद करना चाहिए और एक नया डिस्क्रिप्टर प्राप्त करना चाहिए सॉकेट (), स्थितियों में कनेक्ट करने के लिए कॉल () विफल रहता है।{{sfn|Stevens|Rago|2013|p=607}}


=== gethostbyname और gethostbyaddr ===
=== gethostbyname और gethostbyaddr ===
कार्य gethostbyname() और gethostbyaddr() का उपयोग [[डोमेन की नामांकन प्रणाली]] या स्थानीय होस्ट के अन्य रिज़ॉल्वर तंत्र (जैसे, /etc/hosts लुकअप) में होस्ट नाम और पते को हल करने के लिए किया जाता है। वे <var>स्ट्रक्चर होस्टेंट</var> प्रकार के ऑब्जेक्ट के लिए एक पॉइंटर लौटाते हैं, जो एक [[इंटरनेट प्रोटोकॉल]] होस्ट का वर्णन करता है। कार्य निम्नलिखित तर्कों का उपयोग करते हैं:
कार्य gethostbyname() और gethostbyaddr() का उपयोग [[डोमेन की नामांकन प्रणाली]] या स्थानीय आयोजकों के अन्य रिज़ॉल्वर तंत्र (जैसे, /etc/hosts लुकअप) में आयोजकों नाम और पते को हल करने के लिए किया जाता है। वे <var>संरचना आयोजकोंेंट</var> प्रकार के ऑब्जेक्ट के लिए एक पॉइंटर लौटाते हैं, जो एक [[इंटरनेट प्रोटोकॉल]] आयोजकों का वर्णन करता है। कार्य निम्नलिखित तर्कों का उपयोग करते हैं:
* <var>name</var> होस्ट का नाम निर्दिष्ट करता है।
* <var>name</var> आयोजकों का नाम निर्दिष्ट करता है।
* <var>addr</var> होस्ट के पते वाले <var>struct in_addr</var> के लिए एक संकेतक निर्दिष्ट करता है।
* <var>addr</var> आयोजकों के पते वाले <var>struct in_addr</var> के लिए एक संकेतक निर्दिष्ट करता है।
* <var>len</var> <var>addr</var> की बाइट्स में लंबाई निर्दिष्ट करता है।
* <var>len</var> <var>addr</var> की बाइट्स में लंबाई निर्दिष्ट करता है।
* <var>type</var> होस्ट पते का पता परिवार प्रकार (उदा., AF_INET) निर्दिष्ट करता है।
* <var>type</var> आयोजकों पते का पता परिवार प्रकार (उदा., AF_INET) निर्दिष्ट करता है।


त्रुटि के मामले में फ़ंक्शन एक पूर्ण सूचक लौटाता है, जिस स्थिति में बाहरी पूर्णांक होता है {{mono|<var>h_errno</var>}} को यह देखने के लिए चेक किया जा सकता है कि यह एक अस्थायी विफलता है या अमान्य या अज्ञात होस्ट है। अन्यथा एक वैध <var>struct hostent *</var> दिया जाता है।
त्रुटि के स्थितियों में फलन एक पूर्ण सूचक लौटाता है, जिस स्थिति में बाहरी पूर्णांक होता है {{mono|<var>h_errno</var>}} को यह देखने के लिए चेक किया जा सकता है कि यह एक अस्थायी विफलता है या अमान्य या अज्ञात आयोजकों है। अन्यथा एक वैध <var>struct hostent *</var> दिया जाता है।


ये फ़ंक्शन सख्ती से बीएसडी सॉकेट एपीआई का एक घटक नहीं हैं, लेकिन अक्सर होस्ट को देखने के लिए एपीआई फ़ंक्शंस के साथ संयोजन में उपयोग किया जाता है। डोमेन नेम सिस्टम को क्वेरी करने के लिए इन कार्यों को अब लीगेसी इंटरफेस माना जाता है। नए कार्य जो पूरी तरह से प्रोटोकॉल-अज्ञेयवादी हैं (IPv6 का समर्थन करते हैं) परिभाषित किए गए हैं। ये नए कार्य [[get[[addrinfo]]]]|getaddrinfo() और getnameinfo() हैं, और एक नई Addrinfo डेटा संरचना पर आधारित हैं।<ref>POSIX.1-2004</ref>
ये फलन सख्ती से बीएसडी सॉकेट एपीआई का एक घटक नहीं हैं, लेकिन अधिकांशतः आयोजकों को देखने के लिए एपीआई फलन के साथ संयोजन में उपयोग किया जाता है। डोमेन नेम प्रणाली को क्वेरी करने के लिए इन कार्यों को अब लीगेसी इंटरफेस माना जाता है। नए कार्य जो पूरी तरह से प्रोटोकॉल-अज्ञेयवादी हैं (IPv6 का समर्थन करते हैं) परिभाषित किए गए हैं। ये नए कार्य [[get[[addrinfo]]]]|getaddrinfo() और getnameinfo() हैं, और एक नई Addrinfo डेटा संरचना पर आधारित हैं।<ref>POSIX.1-2004</ref>
कार्यों की यह जोड़ी 4.2BSD (1983) में BSD सॉकेट एपीआई के रूप में एक ही समय में दिखाई दी,<ref>{{man|3|gethostbyname|FreeBSD}}</ref> उसी वर्ष DNS पहली बार बनाया गया था। शुरुआती संस्करणों ने DNS को क्वेरी नहीं किया और केवल /etc/hosts लुकअप किया। 4.3BSD (1984) संस्करण ने DNS को कच्चे तरीके से जोड़ा। [[नाम सेवा स्विच]] का उपयोग करने वाला वर्तमान कार्यान्वयन Solaris और बाद में NetBSD 1.4 (1999) को प्राप्त करता है।<ref name="Conill">{{cite web |last1=Conill |first1=Ariadne |title=gethostbyname की त्रासदी|url=https://ariadne.space/2022/03/27/the-tragedy-of-gethostbyname/ |website=ariadne.space |date=March 27, 2022}}</ref> प्रारंभ में एनआईएस+ के लिए परिभाषित, एनएसएस डीएनएस को इन कार्यों द्वारा देखने के लिए कई विकल्पों में से केवल एक बनाता है और इसका उपयोग आज भी अक्षम किया जा सकता है।<ref>{{man|5|nsswitch.conf|FreeBSD}}</ref>


कार्यों की यह जोड़ी 4.2बीएसडी (1983) में बीएसडी सॉकेट एपीआई के रूप में एक ही समय में दिखाई दी,<ref>{{man|3|gethostbyname|FreeBSD}}</ref> उसी वर्ष डीएनएस पहली बार बनाया गया था। प्रारंभी संस्करणों ने डीएनएस को क्वेरी नहीं किया और केवल /etc/hosts लुकअप किया। 4.3बीएसडी (1984) संस्करण ने डीएनएस को कच्चे विधियों से जोड़ा जाता है। [[नाम सेवा स्विच]] का उपयोग करने वाला वर्तमान कार्यान्वयन सोलारिस और बाद में Netबीएसडी 1.4 (1999) को प्राप्त करता है।<ref name="Conill">{{cite web |last1=Conill |first1=Ariadne |title=gethostbyname की त्रासदी|url=https://ariadne.space/2022/03/27/the-tragedy-of-gethostbyname/ |website=ariadne.space |date=March 27, 2022}}</ref> प्रारंभ में एनआईएस+ के लिए परिभाषित, एनएसएस डीएनएस को इन कार्यों द्वारा देखने के लिए कई विकल्पों में से केवल एक बनाता है और इसका उपयोग आज भी अक्षम किया जा सकता है।<ref>{{man|5|nsswitch.conf|FreeBSD}}</ref>


== प्रोटोकॉल और पता परिवारों ==
 
 
== प्रोटोकॉल और एड्रेस फैमली ==
बर्कले सॉकेट एपीआई नेटवर्किंग और इंटरप्रोसेस संचार के लिए एक सामान्य इंटरफ़ेस है, और विभिन्न नेटवर्क प्रोटोकॉल और एड्रेस आर्किटेक्चर के उपयोग का समर्थन करता है।
बर्कले सॉकेट एपीआई नेटवर्किंग और इंटरप्रोसेस संचार के लिए एक सामान्य इंटरफ़ेस है, और विभिन्न नेटवर्क प्रोटोकॉल और एड्रेस आर्किटेक्चर के उपयोग का समर्थन करता है।


निम्नलिखित एक आधुनिक [[लिनक्स]] या [[बीएसडी]] कार्यान्वयन में परिभाषित प्रोटोकॉल परिवारों (मानक प्रतीकात्मक पहचानकर्ता से पहले) का एक नमूना सूचीबद्ध करता है:
निम्नलिखित एक आधुनिक [[लिनक्स]] या [[बीएसडी]] कार्यान्वयन में परिभाषित प्रोटोकॉल परिवारों (मानक प्रतीकात्मक पहचानकर्ता से पहले) का एक नमूना सूचीबद्ध करता है:
{| class="wikitable sortable"
{| class="wikitable sortable"
!Identifier || Function or use
!पहचानकर्ता || कार्य या प्रयोग
|-
|-
|PF_APPLETALK || [[AppleTalk]]
|PF_APPLETALK || [[AppleTalk|एप्पलटॉक]]
|-
|-
|PF_ATMPVC || [[Asynchronous Transfer Mode]] Permanent Virtual Circuits
|PF_ATMPVC || अतुल्यकालिक स्थानांतरण मोड स्थायी वर्चुअल सर्किट
|-
|-
|PF_ATMSVC || Asynchronous Transfer Mode Switched Virtual Circuits
|PF_ATMSVC || एसिंक्रोनस ट्रांसफर मोड स्विच्ड वर्चुअल सर्किट
|-
|-
|PF_AX25 || Amateur Radio [[AX.25]]
|PF_AX25 || एमेच्योर रेडियो AX.25
|-
|-
|style="font-weight:bold"|PF_BLUETOOTH || [[Bluetooth]] sockets
|style="font-weight:bold"|PF_BLUETOOTH || ब्लूटूथ सॉकेट
|-
|-
|PF_BRIDGE || Multiprotocol [[Bridging (networking)|bridge]]
|PF_BRIDGE || मल्टीप्रोटोकॉल ब्रिज
|-
|-
|PF_DECnet || Reserved for [[DECnet]] project
|PF_DECnet || DECnet परियोजना के लिए आरक्षित
|-
|-
|PF_ECONET || Acorn [[Econet]]
|PF_ECONET || Acorn [[Econet]]
|-
|-
|style="font-weight:bold"|PF_INET || [[IPv4|Internet Protocol version 4]]
|style="font-weight:bold"|PF_INET || [[IPv4|इंटरनेट प्रोटोकॉल संस्करण 4]]
|-
|-
|style="font-weight:bold"|PF_INET6 || [[IPv6|Internet Protocol version 6]]
|style="font-weight:bold"|PF_INET6 || [[IPv6|इंटरनेट प्रोटोकॉल संस्करण 6]]
|-
|-
|PF_IPX || Novell's [[Internetwork Packet Exchange]]
|PF_IPX || '''Novell's''' [[Internetwork Packet Exchange|नोवेल का इंटरनेटवर्क पैकेट एक्सचेंज '''Packet Exchange''']]
|-
|-
|PF_IRDA || [[IrDA]] sockets
|PF_IRDA || आईआरडीए सॉकेट
|-
|-
|PF_KEY  || PF_KEY key management API
|PF_KEY  || PF_KEY कुंजी प्रबंधन एपीआई
|-
|-
|style="font-weight:bold"|PF_LOCAL, PF_UNIX, PF_FILE || Local to host (pipes and file-domain)
|style="font-weight:bold"|PF_LOCAL, PF_UNIX, PF_FILE || होस्ट करने के लिए स्थानीय (पाइप और फ़ाइल-डोमेन)
|-
|-
|PF_NETROM || Amateur radio NET/ROM (related to AX.25)<ref>{{cite web |url=https://manpages.debian.org/experimental/ax25-tools/netrom.4.en.html}}</ref>
|PF_NETROM || एमेच्योर रेडियो नेट/रोम (AX.25 से संबंधित)<ref>{{cite web |url=https://manpages.debian.org/experimental/ax25-tools/netrom.4.en.html}}</ref>
|-
|-
|PF_NETBEUI || Reserved for 802.2LLC project
|PF_NETBEUI || 802.2 एलएलसी परियोजना के लिए आरक्षित
|-
|-
|PF_SECURITY || Security callback pseudo AF
|PF_SECURITY || सुरक्षा कॉलबैक स्यूडो एएफ
|-
|-
|PF_NETLINK, PF_ROUTE || routing API
|PF_NETLINK, PF_ROUTE || रूटिंग एपीआई
|-
|-
|PF_PACKET || Packet capture sockets
|PF_PACKET || पैकेट कैप्चर सॉकेट
|-
|-
|PF_PPPOX || [[PPPoX|PPP over X]] sockets
|PF_PPPOX || [[PPPoX|पीपीपी एक्स सॉकेट पर '''over X''']] '''sockets'''
|-
|-
|PF_SNA || Linux [[Systems Network Architecture]] (SNA) Project
|PF_SNA || '''Linux''' [[Systems Network Architecture|लिनक्स सिस्टम नेटवर्क आर्किटेक्चर (एसएनए) प्रोजेक्ट '''Network Architecture''']] '''(SNA) Project'''
|-
|-
|PF_WANPIPE || Sangoma Wanpipe API sockets
|PF_WANPIPE || सांगोमा वानपाइप एपीआई सॉकेट
|}
|}
संचार के लिए एक सॉकेट के साथ बनाया गया है {{code|socket()}} समारोह, वांछित प्रोटोकॉल परिवार निर्दिष्ट करके ({{mono|PF_}}-पहचानकर्ता) एक तर्क के रूप में।
संचार के लिए एक सॉकेट के साथ बनाया गया है {{code|socket()}} फलन, वांछित प्रोटोकॉल परिवार निर्दिष्ट करके ({{mono|PF_}}-पहचानकर्ता) एक तर्क के रूप में।
 
सॉकेट इंटरफ़ेस की मूल डिजाइन अवधारणा प्रोटोकॉल प्रकार (परिवारों) और प्रत्येक उपयोग किए जा सकने वाले विशिष्ट पता प्रकारों के बीच प्रतिष्ठित है। यह कल्पना की गई थी कि एक प्रोटोकॉल परिवार के कई पता प्रकार हो सकते हैं। पता प्रकार उपसर्ग का उपयोग करके अतिरिक्त प्रतीकात्मक स्थिरांक द्वारा परिभाषित किए गए थे {{mono|AF}} के अतिरिक्त {{mono|PF}}. वह {{mono|AF}}-पहचानकर्ता उन सभी डेटा संरचनाओं के लिए अभिप्रेत हैं जो विशेष रूप से पता प्रकार से संबंधित हैं न कि प्रोटोकॉल परिवार से संबंधित हैं।
 
चूँकि, प्रोटोकॉल और पता प्रकार को अलग करने की इस अवधारणा को कार्यान्वयन समर्थन नहीं मिला है और {{mono|AF}}-स्थिरांक को संबंधित प्रोटोकॉल पहचानकर्ता द्वारा परिभाषित किया गया था, जिसके बीच अंतर छोड़ दिया गया था {{mono|AF}} और {{mono|PF}} कोई व्यावहारिक परिणाम के तकनीकी तर्क के रूप में स्थिरांक। दरअसल, दोनों रूपों के उचित उपयोग में काफी भ्रम उपस्थित है।<ref>''UNIX Network Programming'' Volume 1, Third  Edition: The Sockets Networking API,  W. Richard Stevens, Bill Fenner, Andrew M. Rudoff, Addison Wesley, 2003.</ref>
 
पॉज़िक्स.1—2008 विनिर्देश कोई निर्दिष्ट नहीं करता है {{mono|PF}}-स्थिरांक, लेकिन केवल {{mono|AF}}-स्थिरांक<ref>{{cite web |url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html |title=The Open Group Base Specifications Issue 7 |publisher=Pubs.opengroup.org |access-date=2012-07-26}}</ref>


सॉकेट इंटरफ़ेस की मूल डिजाइन अवधारणा प्रोटोकॉल प्रकार (परिवारों) और प्रत्येक उपयोग किए जा सकने वाले विशिष्ट पता प्रकारों के बीच प्रतिष्ठित है। यह कल्पना की गई थी कि एक प्रोटोकॉल परिवार के कई पता प्रकार हो सकते हैं। पता प्रकार उपसर्ग का उपयोग करके अतिरिक्त प्रतीकात्मक स्थिरांक द्वारा परिभाषित किए गए थे {{mono|AF}} के बजाय {{mono|PF}}. वह {{mono|AF}}-पहचानकर्ता उन सभी डेटा संरचनाओं के लिए अभिप्रेत हैं जो विशेष रूप से पता प्रकार से संबंधित हैं न कि प्रोटोकॉल परिवार से।
हालांकि, प्रोटोकॉल और पता प्रकार को अलग करने की इस अवधारणा को कार्यान्वयन समर्थन नहीं मिला है और {{mono|AF}}-स्थिरांक को संबंधित प्रोटोकॉल पहचानकर्ता द्वारा परिभाषित किया गया था, जिसके बीच अंतर छोड़ दिया गया था {{mono|AF}} और {{mono|PF}} कोई व्यावहारिक परिणाम के तकनीकी तर्क के रूप में स्थिरांक। दरअसल, दोनों रूपों के उचित उपयोग में काफी भ्रम मौजूद है।<ref>''UNIX Network Programming'' Volume 1, Third  Edition: The Sockets Networking API,  W. Richard Stevens, Bill Fenner, Andrew M. Rudoff, Addison Wesley, 2003.</ref>
POSIX.1—2008 विनिर्देश कोई निर्दिष्ट नहीं करता है {{mono|PF}}-स्थिरांक, लेकिन केवल {{mono|AF}}-स्थिरांक<ref>{{cite web |url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html |title=The Open Group Base Specifications Issue 7 |publisher=Pubs.opengroup.org |access-date=2012-07-26}}</ref>




=== कच्चे सॉकेट ===
=== कच्चे सॉकेट ===
कच्चे सॉकेट एक सरल इंटरफ़ेस प्रदान करते हैं जो होस्ट के टीसीपी/आईपी स्टैक द्वारा प्रसंस्करण को बायपास करता है। वे उपयोगकर्ता स्थान में नेटवर्किंग प्रोटोकॉल के कार्यान्वयन की अनुमति देते हैं और प्रोटोकॉल स्टैक के डिबगिंग में सहायता करते हैं।<ref>{{cite web | url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx | title=TCP/IP raw sockets - Win32 apps }}</ref> कच्चे सॉकेट का उपयोग कुछ सेवाओं द्वारा किया जाता है, जैसे कि [[इंटरनेट नियंत्रण संदेश प्रोटोकॉल]], जो टीसीपी/आईपी मॉडल के [[ इंटरनेट परत ]] पर काम करता है।
कच्चे सॉकेट एक सरल इंटरफ़ेस प्रदान करते हैं जो आयोजकों के टीसीपी/आईपी स्टैक द्वारा प्रसंस्करण को बायपास करता है। वे उपयोगकर्ता स्थान में नेटवर्किंग प्रोटोकॉल के कार्यान्वयन की अनुमति देते हैं और प्रोटोकॉल स्टैक के डिबगिंग में सहायता करते हैं।<ref>{{cite web | url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx | title=TCP/IP raw sockets - Win32 apps }}</ref> कच्चे सॉकेट का उपयोग कुछ सेवाओं द्वारा किया जाता है, जैसे कि [[इंटरनेट नियंत्रण संदेश प्रोटोकॉल]], जो टीसीपी/आईपी मॉडल के [[ इंटरनेट परत ]] पर काम करता है।


== ब्लॉकिंग और नॉन-ब्लॉकिंग मोड ==
== अवरुद्ध और गैर-अवरुद्ध मोड ==
बर्कले सॉकेट दो मोड में से एक में काम कर सकता है: [[ अवरोधन (कंप्यूटिंग) ]] या नॉन-ब्लॉकिंग।
बर्कले सॉकेट दो मोड में से एक में काम कर सकता है: [[ अवरोधन (कंप्यूटिंग) ]] या गैर-अवरुद्ध।


एक अवरुद्ध सॉकेट तब तक नियंत्रण वापस नहीं करता जब तक कि उसने ऑपरेशन के लिए निर्दिष्ट कुछ या सभी डेटा नहीं भेजे (या प्राप्त किए)। अवरुद्ध सॉकेट के लिए सभी डेटा नहीं भेजना सामान्य है। कितने बाइट भेजे या प्राप्त किए गए हैं यह निर्धारित करने के लिए एप्लिकेशन को वापसी मूल्य की जांच करनी चाहिए और इसे पहले से संसाधित नहीं किए गए किसी भी डेटा को फिर से भेजना चाहिए।<ref>{{cite web|url=http://beej.us/guide/bgnet/ |title=बीज की नेटवर्क प्रोग्रामिंग के लिए गाइड|publisher=Beej.us |date=2007-05-05 |access-date=2012-07-26}}</ref> ब्लॉकिंग सॉकेट्स का उपयोग करते समय, स्वीकार करने के लिए विशेष ध्यान दिया जाना चाहिए () क्योंकि यह पठनीयता का संकेत देने के बाद भी ब्लॉक हो सकता है यदि क्लाइंट कनेक्शन चरण के दौरान डिस्कनेक्ट हो जाता है।
एक अवरुद्ध सॉकेट तब तक नियंत्रण वापस नहीं करता जब तक कि उसने ऑपरेशन के लिए निर्दिष्ट कुछ या सभी डेटा नहीं भेजे (या प्राप्त किए)। अवरुद्ध सॉकेट के लिए सभी डेटा नहीं भेजना सामान्य है। कितने बाइट भेजे या प्राप्त किए गए हैं यह निर्धारित करने के लिए एप्लिकेशन को वापसी मूल्य की जांच करनी चाहिए और इसे पहले से संसाधित नहीं किए गए किसी भी डेटा को फिर से भेजना चाहिए।<ref>{{cite web|url=http://beej.us/guide/bgnet/ |title=बीज की नेटवर्क प्रोग्रामिंग के लिए गाइड|publisher=Beej.us |date=2007-05-05 |access-date=2012-07-26}}</ref> अवरुद्ध सॉकेट्स का उपयोग करते समय, स्वीकार करने के लिए विशेष ध्यान दिया जाना चाहिए () क्योंकि यह पठनीयता का संकेत देने के बाद भी ब्लॉक हो सकता है यदि क्लाइंट कनेक्शन चरण के समय डिस्कनेक्ट हो जाता है।


एक गैर-अवरुद्ध सॉकेट प्राप्त बफर में जो कुछ भी है उसे लौटाता है और तुरंत जारी रहता है। यदि सही ढंग से नहीं लिखा गया है, तो गैर-अवरोधक सॉकेट का उपयोग करने वाले प्रोग्राम विशेष रूप से नेटवर्क लिंक गति में भिन्नता के कारण [[दौड़ की स्थिति]] के लिए अतिसंवेदनशील होते हैं।{{citation needed|date=May 2021}}
एक गैर-अवरुद्ध सॉकेट प्राप्त बफर में जो कुछ भी है उसे लौटाता है और तुरंत प्रयुक्त रहता है। यदि सही ढंग से नहीं लिखा गया है, तो गैर-अवरोधक सॉकेट का उपयोग करने वाले प्रोग्राम विशेष रूप से नेटवर्क लिंक गति में भिन्नता के कारण [[दौड़ की स्थिति]] के लिए अतिसंवेदनशील होते हैं।{{citation needed|date=May 2021}}


एक सॉकेट आमतौर पर [[fcntl]] और [[ioctl]] फ़ंक्शंस का उपयोग करके ब्लॉकिंग या नॉन-ब्लॉकिंग मोड पर सेट होता है।
एक सॉकेट सामान्यतः [[fcntl]] और [[ioctl]] फलन का उपयोग करके अवरुद्ध या गैर-अवरुद्ध मोड पर सेट होता है।


== समाप्ति सॉकेट ==
== समाप्ति सॉकेट ==
सॉकेट बंद होने तक ऑपरेटिंग सिस्टम सॉकेट को आवंटित संसाधनों को जारी नहीं करता है। यह विशेष रूप से महत्वपूर्ण है यदि कनेक्ट कॉल विफल हो जाती है और पुनः प्रयास किया जाएगा।
सॉकेट बंद होने तक ऑपरेटिंग प्रणाली सॉकेट को आवंटित संसाधनों को प्रयुक्त नहीं करता है। यह विशेष रूप से महत्वपूर्ण है यदि कनेक्ट कॉल विफल हो जाती है और पुनः प्रयास किया जाएगा।


जब कोई एप्लिकेशन सॉकेट को बंद करता है, तो केवल सॉकेट का इंटरफ़ेस नष्ट हो जाता है। सॉकेट को आंतरिक रूप से नष्ट करना कर्नेल की जिम्मेदारी है। कभी-कभी, एक सॉकेट a में प्रवेश कर सकता है {{mono|TIME_WAIT}} स्टेट, सर्वर साइड पर, 4 मिनट तक।<ref>{{cite web|url=http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-4.html#ss4.2 |title=समापन सॉकेट|publisher=Softlab.ntua.gr |access-date=2012-07-26}}</ref>
जब कोई एप्लिकेशन सॉकेट को बंद करता है, तो केवल सॉकेट का इंटरफ़ेस नष्ट हो जाता है। सॉकेट को आंतरिक रूप से नष्ट करना कर्नेल की जिम्मेदारी है। कभी-कभी, एक सॉकेट a में प्रवेश कर सकता है {{mono|TIME_WAIT}} स्टेट, सर्वर साइड पर, 4 मिनट तक।<ref>{{cite web|url=http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-4.html#ss4.2 |title=समापन सॉकेट|publisher=Softlab.ntua.gr |access-date=2012-07-26}}</ref>
[[SVR4]] सिस्टम पर इसका उपयोग {{code|close()}} डेटा छोड़ सकता है। का उपयोग {{code|shutdown()}} या SO_LINGER सभी डेटा के वितरण की गारंटी के लिए इन सिस्टमों पर आवश्यक हो सकता है।<ref>{{cite web|url=http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-2.html#time_wait |title=ntua.gr - Programming UNIX Sockets in C - Frequently Asked Questions: Questions regarding both Clients and Servers (TCP/SOCK_STREAM) |publisher=Softlab.ntua.gr |access-date=2012-07-26}}</ref>
[[SVR4]] प्रणाली पर इसका उपयोग {{code|close()}} डेटा छोड़ सकता है। का उपयोग {{code|shutdown()}} या SO_LINGER सभी डेटा के वितरण की गारंटी के लिए इन प्रणालीों पर आवश्यक हो सकता है।<ref>{{cite web|url=http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-2.html#time_wait |title=ntua.gr - Programming UNIX Sockets in C - Frequently Asked Questions: Questions regarding both Clients and Servers (TCP/SOCK_STREAM) |publisher=Softlab.ntua.gr |access-date=2012-07-26}}</ref>




== टीसीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण
 
[[ प्रसारण नियंत्रण प्रोटोकॉल ]] (टीसीपी) एक कनेक्शन-उन्मुख संचार | कनेक्शन-उन्मुख प्रोटोकॉल है जो बाइट स्ट्रीम के प्रसारण के लिए विभिन्न प्रकार के त्रुटि सुधार और प्रदर्शन सुविधाएँ प्रदान करता है। एक प्रक्रिया कॉल करके एक टीसीपी सॉकेट बनाती है {{code|socket()}} प्रोटोकॉल परिवार के लिए मापदंडों के साथ कार्य करता है ({{mono|''[[PF INET]]'', PF_INET6}}), स्ट्रीम सॉकेट के लिए सॉकेट मोड ({{mono|SOCK_STREAM}}), और टीसीपी के लिए आईपी प्रोटोकॉल पहचानकर्ता ({{mono|IPPROTO_TCP}}).
=== == टीसीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण ===
[[ प्रसारण नियंत्रण प्रोटोकॉल | प्रसारण नियंत्रण प्रोटोकॉल]] (टीसीपी) एक कनेक्शन-उन्मुख संचार | कनेक्शन-उन्मुख प्रोटोकॉल है जो बाइट स्ट्रीम के प्रसारण के लिए विभिन्न प्रकार के त्रुटि सुधार और प्रदर्शन सुविधाएँ प्रदान करता है। एक प्रक्रिया कॉल करके एक टीसीपी सॉकेट बनाती है {{code|socket()}} प्रोटोकॉल परिवार के लिए मापदंडों के साथ कार्य करता है ({{mono|''[[PF INET]]'', PF_INET6}}), स्ट्रीम सॉकेट के लिए सॉकेट मोड ({{mono|SOCK_STREAM}}), और टीसीपी के लिए आईपी प्रोटोकॉल पहचानकर्ता ({{mono|IPPROTO_TCP}}) है


=== सर्वर ===
=== सर्वर ===
टीसीपी सर्वर की स्थापना में निम्नलिखित बुनियादी कदम शामिल हैं:
टीसीपी सर्वर की स्थापना में निम्नलिखित मूलभूत कदम सम्मिलित हैं:
* सॉकेट () कॉल के साथ एक टीसीपी सॉकेट बनाना।
* सॉकेट () कॉल के साथ एक टीसीपी सॉकेट बनाना।
* पोर्ट नंबर सेट करने के बाद सॉकेट को लिसनिंग पोर्ट (बाइंड ()) से बांधें।
* पोर्ट नंबर सेट करने के बाद सॉकेट को लिसनिंग पोर्ट (बाइंड ()) से बांधें।
* सुनने के लिए कॉल के साथ कनेक्शन सुनने के लिए सॉकेट तैयार करना (इसे सुनने वाला सॉकेट बनाना)।
* लिसेन के लिए कॉल के साथ कनेक्शन लिसेन के लिए सॉकेट तैयार करना (इसे लिसेन वाला सॉकेट बनाना)।
* आने वाले कनेक्शन स्वीकार करना (स्वीकार ())। आने वाले कनेक्शन प्राप्त होने तक यह प्रक्रिया को अवरुद्ध करता है, और स्वीकृत कनेक्शन के लिए सॉकेट डिस्क्रिप्टर देता है। प्रारंभिक डिस्क्रिप्टर एक सुनने वाला डिस्क्रिप्टर बना रहता है, और इस सॉकेट के साथ किसी भी समय स्वीकार () को फिर से कॉल किया जा सकता है, जब तक कि यह बंद न हो जाए।
* आने वाले कनेक्शन स्वीकार करना (स्वीकार ())। आने वाले कनेक्शन प्राप्त होने तक यह प्रक्रिया को अवरुद्ध करता है, और स्वीकृत कनेक्शन के लिए सॉकेट डिस्क्रिप्टर देता है। प्रारंभिक डिस्क्रिप्टर एक लिसेन वाला डिस्क्रिप्टर बना रहता है, और इस सॉकेट के साथ किसी भी समय स्वीकार () को फिर से कॉल किया जा सकता है, जब तक कि यह बंद न हो जाए।
* एपीआई फ़ंक्शंस सेंड () और आरईवी () के साथ-साथ सामान्य-उद्देश्य फ़ंक्शंस राइट () और रीड () के साथ रिमोट होस्ट के साथ संचार करना।
* एपीआई फलन सेंड () और आरईवी () के साथ-साथ सामान्य-उद्देश्य फलन राइट () और रीड () के साथ रिमोट आयोजकों के साथ संचार करना।
* उपयोग के बाद खोले गए प्रत्येक सॉकेट को बंद करना ()
* उपयोग के बाद खोले गए प्रत्येक सॉकेट को बंद करना ()


निम्न प्रोग्राम पोर्ट नंबर 1100 पर सुनने वाला एक टीसीपी सर्वर बनाता है:
निम्न प्रोग्राम पोर्ट नंबर 1100 पर लिसेन वाला एक टीसीपी सर्वर बनाता है:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 295: Line 301:


=== क्लाइंट ===
=== क्लाइंट ===
एक टीसीपी क्लाइंट एप्लिकेशन प्रोग्रामिंग में निम्नलिखित कदम शामिल हैं:
एक टीसीपी क्लाइंट एप्लिकेशन प्रोग्रामिंग में निम्नलिखित कदम सम्मिलित हैं:
* एक टीसीपी सॉकेट बनाना।
* एक टीसीपी सॉकेट बनाना।
* सर्वर से कनेक्ट करना (कनेक्ट ()), एक पास करके {{code|sockaddr_in}} के साथ संरचना {{code|sin_family}} करने के लिए सेट {{mono|AF_INET}}, {{code|sin_port}} पोर्ट पर सेट करें समापन बिंदु सुन रहा है (नेटवर्क बाइट ऑर्डर में), और {{code|sin_addr}} सुनने वाले सर्वर के आईपी पते पर सेट करें (नेटवर्क बाइट ऑर्डर में भी)।
* सर्वर से कनेक्ट करना (कनेक्ट ()), एक पास करके {{code|sockaddr_in}} के साथ संरचना {{code|sin_family}} करने के लिए सेट {{mono|AF_INET}}, {{code|sin_port}} पोर्ट पर सेट करें समापन बिंदु सुन रहा है (नेटवर्क बाइट ऑर्डर में), और {{code|sin_addr}} लिसेन वाले सर्वर के आईपी पते पर सेट करें (नेटवर्क बाइट ऑर्डर में भी)।
* एपीआई फ़ंक्शंस सेंड () और आरईवी () के साथ-साथ सामान्य-उद्देश्य फ़ंक्शंस राइट () और रीड () के साथ रिमोट होस्ट के साथ संचार करना।
* एपीआई फलन सेंड () और आरईवी () के साथ-साथ सामान्य-उद्देश्य फलन राइट () और रीड () के साथ रिमोट आयोजकों के साथ संचार करना होता है।
* फंक्शन क्लोज () के साथ उपयोग के बाद खोले गए प्रत्येक सॉकेट को बंद करना।
* फलन क्लोज () के साथ उपयोग के बाद खोले गए प्रत्येक सॉकेट को बंद करना।


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 344: Line 350:




== यूडीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण
उपयोगकर्ता डेटाग्राम प्रोटोकॉल (यूडीपी) एक [[संयोजन]] रहित प्रोटोकॉल है जिसमें डिलीवरी की कोई गारंटी नहीं है। UDP पैकेट क्रम से बाहर आ सकते हैं, कई बार आ सकते हैं, या बिल्कुल भी नहीं आ सकते हैं। इस न्यूनतम डिजाइन के कारण, यूडीपी में टीसीपी की तुलना में काफी कम ओवरहेड है। कनेक्शन रहित होने का अर्थ है कि दो मेजबानों के बीच धारा या स्थायी संबंध की कोई अवधारणा नहीं है। ऐसे डेटा को डेटाग्राम (डेटाग्राम सॉकेट) कहा जाता है।


UDP एड्रेस स्पेस, UDP पोर्ट नंबरों का स्पेस (ISO शब्दावली में, [[TSAP]]s), TCP पोर्ट्स से पूरी तरह से अलग है।
=== == यूडीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण ===
उपयोगकर्ता डेटाग्राम प्रोटोकॉल (यूडीपी) एक [[संयोजन]] रहित प्रोटोकॉल है जिसमें डिलीवरी की कोई गारंटी नहीं है। यूडीपी पैकेट क्रम से बाहर आ सकते हैं, कई बार आ सकते हैं, या बिल्कुल भी नहीं आ सकते हैं। इस न्यूनतम डिजाइन के कारण, यूडीपी में टीसीपी की तुलना में बहुत कम ओवरहेड है। कनेक्शन रहित होने का अर्थ है कि दो आयोजको के बीच धारा या स्थायी संबंध की कोई अवधारणा नहीं है। ऐसे डेटा को डेटाग्राम (डेटाग्राम सॉकेट) कहा जाता है।
 
यूडीपी एड्रेस स्पेस, यूडीपी पोर्ट नंबरों का स्पेस (ISO शब्दावली में, [[TSAP]]s), TCP पोर्ट्स से पूरी तरह से अलग है।


=== सर्वर ===
=== सर्वर ===
एक एप्लिकेशन निम्नानुसार पोर्ट नंबर 7654 पर एक यूडीपी सर्वर स्थापित कर सकता है। प्रोग्राम में एक अनंत लूप होता है जो फ़ंक्शन recvfrom () के साथ UDP डेटाग्राम प्राप्त करता है।
एक एप्लिकेशन निम्नानुसार पोर्ट नंबर 7654 पर एक यूडीपी सर्वर स्थापित कर सकता है। प्रोग्राम में एक अनंत लूप होता है जो फ़ंक्शन recvfrom () के साथ यूडीपी डेटाग्राम प्राप्त करता है।


<वाक्यविन्यास लैंग = सी हाइलाइट = 32,25,24>
'''एक एप्लिकेशन निम्नानुसार पोर्ट नंबर 7654 पर एक यूडीपी सर्वर स्थापित कर सकता है। प्रोग्राम में एक अनंत लूप होता है जो फलन recvfrom () के साथ यूडीपी डेटाग्राम प्राप्त करता है।'''<syntaxhighlight>
#शामिल <stdio.h>
#include <stdio.h>
#शामिल <errno.h>
#include <errno.h>
#शामिल <string.h>
#include <string.h>
#शामिल <sys/socket.h>
#include <sys/socket.h>
#शामिल <sys/types.h>
#include <sys/types.h>
#शामिल <netinet/in.h>
#include <netinet/in.h>
#शामिल <unistd.h> /* सॉकेट के लिए बंद () के लिए */
#include <unistd.h> /* for close() for socket */
#शामिल <stdlib.h>
#include <stdlib.h>
 
int main(void)
{
  int sock;
  struct sockaddr_in sa;
  char buffer[1024];
  ssize_t recsize;
  socklen_t fromlen;
 
  memset(&sa, 0, sizeof sa);
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = htonl(INADDR_ANY);
  sa.sin_port = htons(7654);
  fromlen = sizeof sa;
 
  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (bind(sock, (struct sockaddr *)&sa, sizeof sa) == -1) {
    perror("error bind failed");
    close(sock);
    exit(EXIT_FAILURE);
  }
 
  for (;;) {
    recsize = recvfrom(sock, (void*)buffer, sizeof buffer, 0, (struct sockaddr*)&sa, &fromlen);
    if (recsize < 0) {
      fprintf(stderr, "%s\n", strerror(errno));
      exit(EXIT_FAILURE);
    }
    printf("recsize: %d\n ", (int)recsize);
    sleep(1);
    printf("datagram: %.*s\n", (int)recsize, buffer);
  }
}
</syntaxhighlight><वाक्यविन्यास लैंग = सी हाइलाइट = 32,25,24>
#सम्मिलित <stdio.h>
#सम्मिलित <errno.h>
#सम्मिलित <string.h>
#सम्मिलित <sys/socket.h>
#सम्मिलित <sys/types.h>
#सम्मिलित <netinet/in.h>
#सम्मिलित <unistd.h> /* सॉकेट के लिए बंद () के लिए */
#सम्मिलित <stdlib.h>


पूर्णांक मुख्य (शून्य)
पूर्णांक मुख्य (शून्य)
Line 377: Line 426:


   सॉक = सॉकेट (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
   सॉक = सॉकेट (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
   अगर (बाइंड (सॉक, (स्ट्रक्चर सॉकडैड्र *) और सा, साइजोफ सा) == -1) {
   अगर (बाइंड (सॉक, (संरचना सॉकडैड्र *) और सा, साइजोफ सा) == -1) {
     पेरर (त्रुटि बाइंड विफल);
     पेरर (त्रुटि बाइंड विफल);
     करीब (जुर्राब);
     करीब (जुर्राब);
Line 397: Line 446:


=== क्लाइंट ===
=== क्लाइंट ===
UDP पैकेट भेजने के लिए निम्न क्लाइंट प्रोग्राम है जिसमें स्ट्रिंग हैलो वर्ल्ड! पोर्ट नंबर 7654 पर 127.0.0.1 को संबोधित करने के लिए।
यूडीपी पैकेट भेजने के लिए निम्न क्लाइंट प्रोग्राम है जिसमें स्ट्रिंग हैलो वर्ल्ड! पोर्ट नंबर 7654 पर 127.0.0.1 को संबोधित करने के लिए।<syntaxhighlight>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>


<वाक्यविन्यास प्रकाश लैंग = सी हाइलाइट = 40>
int main(void)
#शामिल <stdlib.h>
{
#शामिल <stdio.h>
  int sock;
#शामिल <errno.h>
  struct sockaddr_in sa;
#शामिल <string.h>
  int bytes_sent;
#शामिल <sys/socket.h>
  char buffer[200];
#शामिल <sys/types.h>
#शामिल <netinet/in.h>
  strcpy(buffer, "hello world!");
#शामिल <unistd.h>
#शामिल <arpa/inet.h>
  /* create an Internet, datagram, socket using UDP */
  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (sock == -1) {
      /* if socket failed to initialize, exit */
      printf("Error Creating Socket");
      exit(EXIT_FAILURE);
  }
  /* Zero out socket address */
  memset(&sa, 0, sizeof sa);
 
  /* The address is IPv4 */
  sa.sin_family = AF_INET;
  /* IPv4 addresses is a uint32_t, convert a string representation of the octets to the appropriate value */
  sa.sin_addr.s_addr = inet_addr("127.0.0.1");
 
  /* sockets are unsigned shorts, htons(x) ensures x is in network byte order, set the port to 7654 */
  sa.sin_port = htons(7654);
  bytes_sent = sendto(sock, buffer, strlen(buffer), 0,(struct sockaddr*)&sa, sizeof sa);
  if (bytes_sent < 0) {
    printf("Error sending packet: %s\n", strerror(errno));
    exit(EXIT_FAILURE);
  }
  close(sock); /* close the socket */
  return 0;
}
</syntaxhighlight><वाक्यविन्यास प्रकाश लैंग = सी हाइलाइट = 40>
#सम्मिलित <stdlib.h>
#सम्मिलित <stdio.h>
#सम्मिलित <errno.h>
#सम्मिलित <string.h>
#सम्मिलित <sys/socket.h>
#सम्मिलित <sys/types.h>
#सम्मिलित <netinet/in.h>
#सम्मिलित <unistd.h>
#सम्मिलित <arpa/inet.h>


पूर्णांक मुख्य (शून्य)
पूर्णांक मुख्य (शून्य)
Line 439: Line 535:
   sa.sin_port = htons (7654);
   sa.sin_port = htons (7654);
   
   
   बाइट्स_सेंट = सेंडटो (सॉक, बफर, स्ट्रेल (बफर), 0, (स्ट्रक्चर सॉकडैडर *) और एस, साइजोफ सा);
   बाइट्स_सेंट = सेंडटो (सॉक, बफर, स्ट्रेल (बफर), 0, (संरचना सॉकडैडर *) और एस, साइजोफ सा);
   अगर (बाइट्स_सेंट <0) {
   अगर (बाइट्स_सेंट <0) {
     प्रिंटफ (पैकेट भेजने में त्रुटि:% s \ n, स्ट्रेरर (त्रुटि));
     प्रिंटफ (पैकेट भेजने में त्रुटि:% s \ n, स्ट्रेरर (त्रुटि));
Line 454: Line 550:
==संदर्भ==
==संदर्भ==
{{reflist}}
{{reflist}}
The ''[[de jure]]'' standard definition of the Sockets interface is contained in the POSIX standard, known as:
The ''[[de jure]]'' standard definition of the Sockets interface is contained in the पॉज़िक्स standard, known as:
* [[IEEE]] Std. 1003.1-2001 Standard for Information Technology—Portable Operating System Interface (POSIX).
* [[IEEE]] Std. 1003.1-2001 Standard for Information Technology—Portable Operating System Interface (पॉज़िक्स).
* Open Group Technical Standard: Base Specifications, Issue 6, December 2001.
* Open Group Technical Standard: Base Specifications, Issue 6, December 2001.
* ISO/IEC 9945:2002
* ISO/IEC 9945:2002

Revision as of 19:02, 3 May 2023

बर्कले सॉकेट्स इंटरनेट सॉकेट्स और यूनिक्स डोमेन सॉकेट्स के लिए एक अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई) है, जिसका प्रयोग अंतःप्रक्रम संचार (आईपीसी) के लिए किया जाता है। यह सामान्यतः लिंक करने योग्य मॉड्यूल के पुस्तकालय (कंप्यूटिंग) के रूप में कार्यान्वित किया जाता है। इसका प्रारंभ बर्कले सॉफ्टवेयर वितरण #4बीएसडी| 4.2बीएसडी यूनिक्स ऑपरेटिंग प्रणाली के इतिहास से हुई, जिसे 1983 में प्रयुक्त किया गया था।

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

बर्कले सॉकेट एक वास्तविक मानक से थोड़ा संशोधन के साथ विकसित हुए हैं।वास्तविक मानक पॉज़िक्स विनिर्देश के एक घटक में। पॉज़िक्स सॉकेट्स शब्द अनिवार्य रूप से 'बर्कले सॉकेट्स' का पर्याय है, लेकिन उन्हें बीएसडी सॉकेट्स के रूप में भी जाना जाता है, जो बर्कले सॉफ्टवेयर वितरण में पहले कार्यान्वयन को स्वीकार करते हैं।

इतिहास और कार्यान्वयन

बर्कले सॉकेट्स की उत्पत्ति 4.2बीएसडी यूनिक्स ऑपरेटिंग प्रणाली के साथ हुई, जिसे 1983 में एक प्रोग्रामिंग इंटरफेस के रूप में प्रयुक्त किया गया था। चूँकि, 1989 तक, कैलिफोर्निया विश्वविद्यालय, बर्कले ऑपरेटिंग प्रणाली और नेटवर्किंग लाइब्रेरी के संस्करणों को AT&T कॉर्पोरेशन के स्वामित्व वाली यूनिक्स की लाइसेंसिंग बाधाओं से मुक्त नहीं कर सका।

सभी आधुनिक ऑपरेटिंग प्रणाली बर्कले सॉकेट इंटरफ़ेस के एक संस्करण को प्रयुक्त करते हैं। यह इंटरनेट में चल रहे अनुप्रयोगों के लिए मानक इंटरफ़ेस बन गया। यहां तक ​​कि असंबद्ध डेवलपर्स द्वारा बनाए गए एमएस विंडोज के लिए विनसॉक कार्यान्वयन भी मानक का बारीकी से पालन करता है।

बीएसडी सॉकेट एपीआई सी (प्रोग्रामिंग भाषा) में लिखा गया है। अधिकांश अन्य प्रोग्रामिंग भाषा समान इंटरफेस प्रदान करती हैं, जिन्हें सामान्यतः C API पर आधारित रैपर लाइब्रेरी के रूप में लिखा जाता है।[1]


बीएसडी और पॉज़िक्स सॉकेट

जैसा कि बर्कले सॉकेट एपीआई विकसित हुआ और अंततः पॉज़िक्स सॉकेट एपीआई निकला,[2] कुछ कार्यों को बहिष्कृत या हटा दिया गया और अन्य द्वारा प्रतिस्थापित किया गया। पॉज़िक्स API को भी पुनर्वित्त (कंप्यूटिंग) के लिए डिज़ाइन किया गया है और IPv6 का समर्थन करता है।

कार्रवाई बीएसडी पॉज़िक्स
टेक्स्ट एड्रेस से पैक्ड एड्रेस में रूपांतरण inet_aton inet_pton
पैक किए गए पते से टेक्स्ट पते में रूपांतरण inet_ntoa inet_ntop
आयोजकों नाम/सेवा के लिए फॉरवर्ड लुकअप gethostbyname, gethostbyaddr, getservbyname, getservbyport getaddrinfo
आयोजकों नाम/सेवा के लिए रिवर्स लुकअप gethostbyaddr, getservbyport getnameinfo


विकल्प

स्ट्रीम (नेटवर्किंग एपीआई) आधारित ट्रांसपोर्ट लेयर इंटरफ़ेस (टीएलआई) एपीआई सॉकेट एपीआई के लिए एक विकल्प प्रदान करता है। टीएलआई एपीआई प्रदान करने वाली कई प्रणालियां बर्कले सॉकेट एपीआई भी प्रदान करती हैं।

गैर-यूनिक्स प्रणाली अधिकांशतः बर्कले सॉकेट एपीआई को अनुवाद परत के साथ मूल नेटवर्किंग एपीआई में साक्ष्य करते हैं। बेल लैब्स से प्लान 9[3] और जीनोड[4] फाइल-डिस्क्रिप्टर के अतिरिक्त नियंत्रण फाइलों के साथ फाइल-प्रणाली एपीआई का उपयोग करें।

हैडर फ़ाइलें

बर्कले सॉकेट इंटरफ़ेस को कई शीर्षलेख फ़ाइलों में परिभाषित किया गया है। कार्यान्वयन के बीच इन फ़ाइलों के नाम और सामग्री थोड़ी भिन्न होती है। सामान्यतः, इनमें सम्मिलित हैं:

फाइल विवरण
sys/socket.h Core socket functions and data structures.
netinet/in.h AF_INET and AF_INET6 address families and their corresponding protocol families, PF_INET and PF_INET6. These include standard IP addresses and TCP and UDP port numbers.
sys/un.h PF_UNIX and PF_LOCAL address family. Used for local communication between programs running on the same computer.
arpa/inet.h Functions for manipulating numeric IP addresses.
netdb.h Functions for translating protocol names and host names into numeric addresses. Searches local data as well as name services.


सॉकेट एपीआई फलन

ट्रांसमिशन कंट्रोल प्रोटोकॉल (टीसीपी) के साथ सॉकेट का उपयोग कर क्लाइंट-सर्वर लेनदेन का प्रवाह आरेख।

बर्कले सॉकेट एपीआई सामान्यतः निम्नलिखित कार्य प्रदान करता है:

  • सॉकेट () एक निश्चित प्रकार का एक नया सॉकेट बनाता है, जिसे एक पूर्णांक संख्या द्वारा पहचाना जाता है, और इसके लिए प्रणाली संसाधन आवंटित करता है।
  • बाइंड () सामान्यतः सर्वर साइड पर उपयोग किया जाता है, और सॉकेट को सॉकेट एड्रेस संरचना, यानी एक निर्दिष्ट स्थानीय आईपी एड्रेस और पोर्ट नंबर के साथ जोड़ता है।
  • सुनो () सर्वर साइड पर उपयोग किया जाता है, और एक बाध्य टीसीपी सॉकेट को लिसेन की स्थिति में प्रवेश करने का कारण बनता है।
  • कनेक्ट() क्लाइंट साइड पर प्रयोग किया जाता है, और सॉकेट को एक मुफ्त स्थानीय पोर्ट नंबर असाइन करता है। टीसीपी सॉकेट के स्थितियों में, यह एक नया टीसीपी कनेक्शन स्थापित करने का प्रयास करता है।
  • स्वीकार करें () का उपयोग सर्वर साइड पर किया जाता है। यह रिमोट क्लाइंट से एक नया टीसीपी कनेक्शन बनाने के लिए आने वाले प्रयास को स्वीकार करता है, और इस कनेक्शन के सॉकेट एड्रेस जोड़ी से जुड़ा एक नया सॉकेट बनाता है।
  • सेंड (), आरईवी (), सेंडटो (), और रिकवफ्रॉम () का उपयोग डेटा भेजने और प्राप्त करने के लिए किया जाता है। मानक फलन राइट () और रीड () का भी उपयोग किया जा सकता है।
  • बंद () प्रणाली को सॉकेट के लिए आवंटित संसाधनों को प्रयुक्त करने का कारण बनता है। टीसीपी के स्थितियों में, कनेक्शन समाप्त कर दिया गया है।
  • gethostbyname() और gethostbyaddr() का उपयोग आयोजकों नाम और पते को हल करने के लिए किया जाता है। IPv4 केवल।
  • getaddrinfo() और freeaddrinfo() का उपयोग आयोजकों नाम और पते को हल करने के लिए किया जाता है। IPv4, IPv6.
  • चयन () का उपयोग निलंबित करने के लिए किया जाता है, सॉकेट्स की एक या अधिक प्रदान की गई सूची को पढ़ने के लिए तैयार होने, लिखने के लिए तैयार होने या त्रुटियों के लिए प्रतीक्षा करने के लिए।
  • पोल () का उपयोग सॉकेट के सेट में सॉकेट की स्थिति की जांच के लिए किया जाता है। यह देखने के लिए सेट का परीक्षण किया जा सकता है कि क्या कोई सॉकेट लिखा जा सकता है, पढ़ा जा सकता है या कोई त्रुटि हुई है या नहीं।
  • getockopt() निर्दिष्ट सॉकेट के लिए किसी विशेष सॉकेट विकल्प के वर्तमान मान को पुनर्प्राप्त करने के लिए उपयोग किया जाता है।
  • setockopt() निर्दिष्ट सॉकेट के लिए एक विशेष सॉकेट विकल्प सेट करने के लिए प्रयोग किया जाता है।

सॉकेट

फलन सॉकेट () संचार के लिए एक समापन बिंदु बनाता है और सॉकेट के लिए फ़ाइल डिस्क्रिप्टर देता है। यह तीन तर्कों का उपयोग करता है:

  • domain, जो निर्मित सॉकेट के प्रोटोकॉल परिवार को निर्दिष्ट करता है। उदाहरण के लिए:
    • AF_INET नेटवर्क प्रोटोकॉल IPv4 के लिए (केवल IPv4)
    • AF_INET6 IPv6 के लिए (और कुछ स्थितियों में, IPv4 के साथ पिछड़ा संगत)
    • AF_UNIX स्थानीय सॉकेट के लिए (एक विशेष फाइलप्रणाली नोड का उपयोग करके)
  • type, में से एक:
    • SOCK_STREAM (विश्वसनीय स्ट्रीम-उन्मुख सेवा या स्ट्रीम सॉकेट)
    • SOCK_DGRAM (डेटाग्राम सेवा या डेटाग्राम सॉकेट)
    • SOCK_SEQPACKET (विश्वसनीय अनुक्रमित पैकेट सेवा)
    • SOCK_RAW (नेटवर्क परत के ऊपर अपरिष्कृत प्रोटोकॉल)
  • protocol उपयोग करने के लिए वास्तविक परिवहन प्रोटोकॉल निर्दिष्ट करना। सबसे आम हैं ट्रांसमिशन कंट्रोल प्रोटोकॉल |IPPROTO_TCP, एससीटीपी |IPPROTO_SCTP, उपयोगकर्ता डेटाग्राम प्रोटोकॉल |IPPROTO_UDP, डीसीसीपी |IPPROTO_DCCP. ये प्रोटोकॉल फ़ाइल netinet/in.h में निर्दिष्ट हैं। मूल्य 0 का उपयोग चयनित डोमेन और प्रकार से एक डिफ़ॉल्ट प्रोटोकॉल का चयन करने के लिए किया जा सकता है।

फलन लौटता है -1 अगर कोई त्रुटि हुई। अन्यथा, यह नए असाइन किए गए डिस्क्रिप्टर का प्रतिनिधित्व करने वाला एक पूर्णांक देता है।

बाइंड

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

  • sockfd, सॉकेट का प्रतिनिधित्व करने वाला एक विवरणक
  • my_addr, sockaddr संरचना के लिए एक संकेतक जो बाइंड किए जाने वाले पते का प्रतिनिधित्व करता है।
  • addrlen, sockaddr संरचना के आकार को निर्दिष्ट करने वाले socklen_t प्रकार का एक क्षेत्र।

बाइंड () सफलता पर 0 और -1 त्रुटि होने पर रिटर्न देता है।

लिसेन

सॉकेट को एक पते से जोड़ने के बाद, listen() इसे इनकमिंग कनेक्शन के लिए तैयार करता है। चूँकि, यह केवल स्ट्रीम-ओरिएंटेड (कनेक्शन-ओरिएंटेड) डेटा मोड के लिए आवश्यक है, यानी, सॉकेट प्रकार (SOCK_STREAM, SOCK_SEQPACKET) के लिए। listen() को दो तर्कों की आवश्यकता है:

  • sockfd, एक मान्य सॉकेट डिस्क्रिप्टर।
  • बैकलॉग, लंबित कनेक्शनों की संख्या का प्रतिनिधित्व करने वाला एक पूर्णांक जिसे किसी भी समय कतारबद्ध किया जा सकता है। ऑपरेटिंग प्रणाली सामान्यतः इस मान पर एक कैप लगाता है।

एक बार एक कनेक्शन स्वीकार कर लेने के बाद, इसे हटा दिया जाता है। सफल होने पर, 0 लौटाया जाता है। यदि कोई त्रुटि होती है, तो -1 वापस आ जाता है।

स्वीकार करें

जब कोई एप्लिकेशन अन्य आयोजकों से स्ट्रीम-ओरिएंटेड कनेक्शन के लिए सुन रहा होता है, तो उसे ऐसी घटनाओं के बारे में सूचित किया जाता है (cf. सेलेक्ट (यूनिक्स) | सेलेक्ट () फलन) और फलन स्वीकार () का उपयोग करके कनेक्शन को प्रारंभिककरण करना चाहिए। यह प्रत्येक कनेक्शन के लिए एक नया सॉकेट बनाता है और कनेक्शन को लिसेन की कतार से हटा देता है। फलन में निम्नलिखित तर्क हैं:

  • sockfd, लिसनिंग सॉकेट का डिस्क्रिप्टर जिसमें कनेक्शन कतारबद्ध है।
  • cliaddr, क्लाइंट के पते की जानकारी प्राप्त करने के लिए sockaddr संरचना का सूचक।
  • addrlen, एक socklen_t स्थान के लिए एक सूचक जो स्वीकार करने के लिए पास किए गए क्लाइंट पता संरचना के आकार को निर्दिष्ट करता है ()। जब स्वीकार () रिटर्न होता है, तो इस स्थान में संरचना का आकार (बाइट्स में) होता है।

स्वीकार करें () स्वीकृत कनेक्शन के लिए नया सॉकेट डिस्क्रिप्टर लौटाता है, या त्रुटि होने पर मान -1 देता है। दूरस्थ आयोजकों के साथ आगे के सभी संचार अब इस नए सॉकेट के माध्यम से होते हैं।

डेटाग्राम सॉकेट्स को स्वीकार () द्वारा प्रसंस्करण की आवश्यकता नहीं होती है क्योंकि रिसीवर तुरंत लिसेन वाले सॉकेट का उपयोग करके अनुरोध का उत्तर दे सकता है।

कनेक्ट करें

कनेक्ट () एक सॉकेट के माध्यम से अपने पते द्वारा पहचाने गए एक विशिष्ट दूरस्थ आयोजकों के लिए एक सीधा संचार लिंक स्थापित करता है, जिसे उसके फाइल डिस्क्रिप्टर द्वारा पहचाना जाता है।

कनेक्शन-उन्मुख संचार | कनेक्शन-उन्मुख प्रोटोकॉल का उपयोग करते समय, यह एक कनेक्शन स्थापित करता है। कुछ प्रकार के प्रोटोकॉल कनेक्शन रहित होते हैं, विशेष रूप से उपयोगकर्ता डेटाग्राम प्रोटेकॉल का उपयोग करें कनेक्शन रहित प्रोटोकॉल के साथ प्रयोग किया जाता है, तो कनेक्ट डेटा भेजने और प्राप्त करने के लिए रिमोट एड्रेस को परिभाषित करता है, जिससे भेजने और रिकव जैसे कार्यों का उपयोग करने की अनुमति मिलती है। इन स्थितियों में, कनेक्ट फलन अन्य स्रोतों से डेटाग्राम प्राप्त करने से रोकता है।

कनेक्ट () त्रुटि कोड का प्रतिनिधित्व करने वाला एक पूर्णांक देता है: 0 सफलता का प्रतिनिधित्व करता है, जबकि -1 एक त्रुटि का प्रतिनिधित्व करता है। ऐतिहासिक रूप से, बीएसडी-व्युत्पन्न प्रणालियों में, सॉकेट डिस्क्रिप्टर की स्थिति अपरिभाषित होती है यदि कनेक्ट करने के लिए कॉल विफल हो जाती है (जैसा कि यह एकल यूनिक्स विशिष्टता में निर्दिष्ट है), इस प्रकार, पोर्टेबल एप्लिकेशन को सॉकेट डिस्क्रिप्टर को तुरंत बंद करना चाहिए और एक नया डिस्क्रिप्टर प्राप्त करना चाहिए सॉकेट (), स्थितियों में कनेक्ट करने के लिए कॉल () विफल रहता है।[5]

gethostbyname और gethostbyaddr

कार्य gethostbyname() और gethostbyaddr() का उपयोग डोमेन की नामांकन प्रणाली या स्थानीय आयोजकों के अन्य रिज़ॉल्वर तंत्र (जैसे, /etc/hosts लुकअप) में आयोजकों नाम और पते को हल करने के लिए किया जाता है। वे संरचना आयोजकोंेंट प्रकार के ऑब्जेक्ट के लिए एक पॉइंटर लौटाते हैं, जो एक इंटरनेट प्रोटोकॉल आयोजकों का वर्णन करता है। कार्य निम्नलिखित तर्कों का उपयोग करते हैं:

  • name आयोजकों का नाम निर्दिष्ट करता है।
  • addr आयोजकों के पते वाले struct in_addr के लिए एक संकेतक निर्दिष्ट करता है।
  • len addr की बाइट्स में लंबाई निर्दिष्ट करता है।
  • type आयोजकों पते का पता परिवार प्रकार (उदा., AF_INET) निर्दिष्ट करता है।

त्रुटि के स्थितियों में फलन एक पूर्ण सूचक लौटाता है, जिस स्थिति में बाहरी पूर्णांक होता है h_errno को यह देखने के लिए चेक किया जा सकता है कि यह एक अस्थायी विफलता है या अमान्य या अज्ञात आयोजकों है। अन्यथा एक वैध struct hostent * दिया जाता है।

ये फलन सख्ती से बीएसडी सॉकेट एपीआई का एक घटक नहीं हैं, लेकिन अधिकांशतः आयोजकों को देखने के लिए एपीआई फलन के साथ संयोजन में उपयोग किया जाता है। डोमेन नेम प्रणाली को क्वेरी करने के लिए इन कार्यों को अब लीगेसी इंटरफेस माना जाता है। नए कार्य जो पूरी तरह से प्रोटोकॉल-अज्ञेयवादी हैं (IPv6 का समर्थन करते हैं) परिभाषित किए गए हैं। ये नए कार्य [[getaddrinfo]]|getaddrinfo() और getnameinfo() हैं, और एक नई Addrinfo डेटा संरचना पर आधारित हैं।[6]

कार्यों की यह जोड़ी 4.2बीएसडी (1983) में बीएसडी सॉकेट एपीआई के रूप में एक ही समय में दिखाई दी,[7] उसी वर्ष डीएनएस पहली बार बनाया गया था। प्रारंभी संस्करणों ने डीएनएस को क्वेरी नहीं किया और केवल /etc/hosts लुकअप किया। 4.3बीएसडी (1984) संस्करण ने डीएनएस को कच्चे विधियों से जोड़ा जाता है। नाम सेवा स्विच का उपयोग करने वाला वर्तमान कार्यान्वयन सोलारिस और बाद में Netबीएसडी 1.4 (1999) को प्राप्त करता है।[8] प्रारंभ में एनआईएस+ के लिए परिभाषित, एनएसएस डीएनएस को इन कार्यों द्वारा देखने के लिए कई विकल्पों में से केवल एक बनाता है और इसका उपयोग आज भी अक्षम किया जा सकता है।[9]


प्रोटोकॉल और एड्रेस फैमली

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

निम्नलिखित एक आधुनिक लिनक्स या बीएसडी कार्यान्वयन में परिभाषित प्रोटोकॉल परिवारों (मानक प्रतीकात्मक पहचानकर्ता से पहले) का एक नमूना सूचीबद्ध करता है:

पहचानकर्ता कार्य या प्रयोग
PF_APPLETALK एप्पलटॉक
PF_ATMPVC अतुल्यकालिक स्थानांतरण मोड स्थायी वर्चुअल सर्किट
PF_ATMSVC एसिंक्रोनस ट्रांसफर मोड स्विच्ड वर्चुअल सर्किट
PF_AX25 एमेच्योर रेडियो AX.25
PF_BLUETOOTH ब्लूटूथ सॉकेट
PF_BRIDGE मल्टीप्रोटोकॉल ब्रिज
PF_DECnet DECnet परियोजना के लिए आरक्षित
PF_ECONET Acorn Econet
PF_INET इंटरनेट प्रोटोकॉल संस्करण 4
PF_INET6 इंटरनेट प्रोटोकॉल संस्करण 6
PF_IPX Novell's नोवेल का इंटरनेटवर्क पैकेट एक्सचेंज Packet Exchange
PF_IRDA आईआरडीए सॉकेट
PF_KEY PF_KEY कुंजी प्रबंधन एपीआई
PF_LOCAL, PF_UNIX, PF_FILE होस्ट करने के लिए स्थानीय (पाइप और फ़ाइल-डोमेन)
PF_NETROM एमेच्योर रेडियो नेट/रोम (AX.25 से संबंधित)[10]
PF_NETBEUI 802.2 एलएलसी परियोजना के लिए आरक्षित
PF_SECURITY सुरक्षा कॉलबैक स्यूडो एएफ
PF_NETLINK, PF_ROUTE रूटिंग एपीआई
PF_PACKET पैकेट कैप्चर सॉकेट
PF_PPPOX पीपीपी एक्स सॉकेट पर over X sockets
PF_SNA Linux लिनक्स सिस्टम नेटवर्क आर्किटेक्चर (एसएनए) प्रोजेक्ट Network Architecture (SNA) Project
PF_WANPIPE सांगोमा वानपाइप एपीआई सॉकेट

संचार के लिए एक सॉकेट के साथ बनाया गया है socket() फलन, वांछित प्रोटोकॉल परिवार निर्दिष्ट करके (PF_-पहचानकर्ता) एक तर्क के रूप में।

सॉकेट इंटरफ़ेस की मूल डिजाइन अवधारणा प्रोटोकॉल प्रकार (परिवारों) और प्रत्येक उपयोग किए जा सकने वाले विशिष्ट पता प्रकारों के बीच प्रतिष्ठित है। यह कल्पना की गई थी कि एक प्रोटोकॉल परिवार के कई पता प्रकार हो सकते हैं। पता प्रकार उपसर्ग का उपयोग करके अतिरिक्त प्रतीकात्मक स्थिरांक द्वारा परिभाषित किए गए थे AF के अतिरिक्त PF. वह AF-पहचानकर्ता उन सभी डेटा संरचनाओं के लिए अभिप्रेत हैं जो विशेष रूप से पता प्रकार से संबंधित हैं न कि प्रोटोकॉल परिवार से संबंधित हैं।

चूँकि, प्रोटोकॉल और पता प्रकार को अलग करने की इस अवधारणा को कार्यान्वयन समर्थन नहीं मिला है और AF-स्थिरांक को संबंधित प्रोटोकॉल पहचानकर्ता द्वारा परिभाषित किया गया था, जिसके बीच अंतर छोड़ दिया गया था AF और PF कोई व्यावहारिक परिणाम के तकनीकी तर्क के रूप में स्थिरांक। दरअसल, दोनों रूपों के उचित उपयोग में काफी भ्रम उपस्थित है।[11]

पॉज़िक्स.1—2008 विनिर्देश कोई निर्दिष्ट नहीं करता है PF-स्थिरांक, लेकिन केवल AF-स्थिरांक[12]


कच्चे सॉकेट

कच्चे सॉकेट एक सरल इंटरफ़ेस प्रदान करते हैं जो आयोजकों के टीसीपी/आईपी स्टैक द्वारा प्रसंस्करण को बायपास करता है। वे उपयोगकर्ता स्थान में नेटवर्किंग प्रोटोकॉल के कार्यान्वयन की अनुमति देते हैं और प्रोटोकॉल स्टैक के डिबगिंग में सहायता करते हैं।[13] कच्चे सॉकेट का उपयोग कुछ सेवाओं द्वारा किया जाता है, जैसे कि इंटरनेट नियंत्रण संदेश प्रोटोकॉल, जो टीसीपी/आईपी मॉडल के इंटरनेट परत पर काम करता है।

अवरुद्ध और गैर-अवरुद्ध मोड

बर्कले सॉकेट दो मोड में से एक में काम कर सकता है: अवरोधन (कंप्यूटिंग) या गैर-अवरुद्ध।

एक अवरुद्ध सॉकेट तब तक नियंत्रण वापस नहीं करता जब तक कि उसने ऑपरेशन के लिए निर्दिष्ट कुछ या सभी डेटा नहीं भेजे (या प्राप्त किए)। अवरुद्ध सॉकेट के लिए सभी डेटा नहीं भेजना सामान्य है। कितने बाइट भेजे या प्राप्त किए गए हैं यह निर्धारित करने के लिए एप्लिकेशन को वापसी मूल्य की जांच करनी चाहिए और इसे पहले से संसाधित नहीं किए गए किसी भी डेटा को फिर से भेजना चाहिए।[14] अवरुद्ध सॉकेट्स का उपयोग करते समय, स्वीकार करने के लिए विशेष ध्यान दिया जाना चाहिए () क्योंकि यह पठनीयता का संकेत देने के बाद भी ब्लॉक हो सकता है यदि क्लाइंट कनेक्शन चरण के समय डिस्कनेक्ट हो जाता है।

एक गैर-अवरुद्ध सॉकेट प्राप्त बफर में जो कुछ भी है उसे लौटाता है और तुरंत प्रयुक्त रहता है। यदि सही ढंग से नहीं लिखा गया है, तो गैर-अवरोधक सॉकेट का उपयोग करने वाले प्रोग्राम विशेष रूप से नेटवर्क लिंक गति में भिन्नता के कारण दौड़ की स्थिति के लिए अतिसंवेदनशील होते हैं।[citation needed]

एक सॉकेट सामान्यतः fcntl और ioctl फलन का उपयोग करके अवरुद्ध या गैर-अवरुद्ध मोड पर सेट होता है।

समाप्ति सॉकेट

सॉकेट बंद होने तक ऑपरेटिंग प्रणाली सॉकेट को आवंटित संसाधनों को प्रयुक्त नहीं करता है। यह विशेष रूप से महत्वपूर्ण है यदि कनेक्ट कॉल विफल हो जाती है और पुनः प्रयास किया जाएगा।

जब कोई एप्लिकेशन सॉकेट को बंद करता है, तो केवल सॉकेट का इंटरफ़ेस नष्ट हो जाता है। सॉकेट को आंतरिक रूप से नष्ट करना कर्नेल की जिम्मेदारी है। कभी-कभी, एक सॉकेट a में प्रवेश कर सकता है TIME_WAIT स्टेट, सर्वर साइड पर, 4 मिनट तक।[15] SVR4 प्रणाली पर इसका उपयोग close() डेटा छोड़ सकता है। का उपयोग shutdown() या SO_LINGER सभी डेटा के वितरण की गारंटी के लिए इन प्रणालीों पर आवश्यक हो सकता है।[16]


== टीसीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण

प्रसारण नियंत्रण प्रोटोकॉल (टीसीपी) एक कनेक्शन-उन्मुख संचार | कनेक्शन-उन्मुख प्रोटोकॉल है जो बाइट स्ट्रीम के प्रसारण के लिए विभिन्न प्रकार के त्रुटि सुधार और प्रदर्शन सुविधाएँ प्रदान करता है। एक प्रक्रिया कॉल करके एक टीसीपी सॉकेट बनाती है socket() प्रोटोकॉल परिवार के लिए मापदंडों के साथ कार्य करता है (PF INET, PF_INET6), स्ट्रीम सॉकेट के लिए सॉकेट मोड (SOCK_STREAM), और टीसीपी के लिए आईपी प्रोटोकॉल पहचानकर्ता (IPPROTO_TCP) है

सर्वर

टीसीपी सर्वर की स्थापना में निम्नलिखित मूलभूत कदम सम्मिलित हैं:

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

निम्न प्रोग्राम पोर्ट नंबर 1100 पर लिसेन वाला एक टीसीपी सर्वर बनाता है:

  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  
  int main(void)
  {
    struct sockaddr_in sa;
    int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (SocketFD == -1) {
      perror("cannot create socket");
      exit(EXIT_FAILURE);
    }
  
    memset(&sa, 0, sizeof sa);
  
    sa.sin_family = AF_INET;
    sa.sin_port = htons(1100);
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
  
    if (bind(SocketFD,(struct sockaddr *)&sa, sizeof sa) == -1) {
      perror("bind failed");
      close(SocketFD);
      exit(EXIT_FAILURE);
    }
  
    if (listen(SocketFD, 10) == -1) {
      perror("listen failed");
      close(SocketFD);
      exit(EXIT_FAILURE);
    }
  
    for (;;) {
      int ConnectFD = accept(SocketFD, NULL, NULL);
  
      if (ConnectFD == -1) {
        perror("accept failed");
        close(SocketFD);
        exit(EXIT_FAILURE);
      }
  
      /* perform read write operations ... 
      read(ConnectFD, buff, size)
      */
  
      if (shutdown(ConnectFD, SHUT_RDWR) == -1) {
        perror("shutdown failed");
        close(ConnectFD);
        close(SocketFD);
        exit(EXIT_FAILURE);
      }
      close(ConnectFD);
    }

    close(SocketFD);
    return EXIT_SUCCESS;  
}


क्लाइंट

एक टीसीपी क्लाइंट एप्लिकेशन प्रोग्रामिंग में निम्नलिखित कदम सम्मिलित हैं:

  • एक टीसीपी सॉकेट बनाना।
  • सर्वर से कनेक्ट करना (कनेक्ट ()), एक पास करके sockaddr_in के साथ संरचना sin_family करने के लिए सेट AF_INET, sin_port पोर्ट पर सेट करें समापन बिंदु सुन रहा है (नेटवर्क बाइट ऑर्डर में), और sin_addr लिसेन वाले सर्वर के आईपी पते पर सेट करें (नेटवर्क बाइट ऑर्डर में भी)।
  • एपीआई फलन सेंड () और आरईवी () के साथ-साथ सामान्य-उद्देश्य फलन राइट () और रीड () के साथ रिमोट आयोजकों के साथ संचार करना होता है।
  • फलन क्लोज () के साथ उपयोग के बाद खोले गए प्रत्येक सॉकेट को बंद करना।
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  
  int main(void)
  {
    struct sockaddr_in sa;
    int res;
    int SocketFD;

    SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (SocketFD == -1) {
      perror("cannot create socket");
      exit(EXIT_FAILURE);
    }
  
    memset(&sa, 0, sizeof sa);
  
    sa.sin_family = AF_INET;
    sa.sin_port = htons(1100);
    res = inet_pton(AF_INET, "192.168.1.3", &sa.sin_addr);

    if (connect(SocketFD, (struct sockaddr *)&sa, sizeof sa) == -1) {
      perror("connect failed");
      close(SocketFD);
      exit(EXIT_FAILURE);
    }
  
    /* perform read write operations ... */
  
    close(SocketFD);
    return EXIT_SUCCESS;
  }


== यूडीपी == का उपयोग कर क्लाइंट-सर्वर उदाहरण

उपयोगकर्ता डेटाग्राम प्रोटोकॉल (यूडीपी) एक संयोजन रहित प्रोटोकॉल है जिसमें डिलीवरी की कोई गारंटी नहीं है। यूडीपी पैकेट क्रम से बाहर आ सकते हैं, कई बार आ सकते हैं, या बिल्कुल भी नहीं आ सकते हैं। इस न्यूनतम डिजाइन के कारण, यूडीपी में टीसीपी की तुलना में बहुत कम ओवरहेड है। कनेक्शन रहित होने का अर्थ है कि दो आयोजको के बीच धारा या स्थायी संबंध की कोई अवधारणा नहीं है। ऐसे डेटा को डेटाग्राम (डेटाग्राम सॉकेट) कहा जाता है।

यूडीपी एड्रेस स्पेस, यूडीपी पोर्ट नंबरों का स्पेस (ISO शब्दावली में, TSAPs), TCP पोर्ट्स से पूरी तरह से अलग है।

सर्वर

एक एप्लिकेशन निम्नानुसार पोर्ट नंबर 7654 पर एक यूडीपी सर्वर स्थापित कर सकता है। प्रोग्राम में एक अनंत लूप होता है जो फ़ंक्शन recvfrom () के साथ यूडीपी डेटाग्राम प्राप्त करता है।

एक एप्लिकेशन निम्नानुसार पोर्ट नंबर 7654 पर एक यूडीपी सर्वर स्थापित कर सकता है। प्रोग्राम में एक अनंत लूप होता है जो फलन recvfrom () के साथ यूडीपी डेटाग्राम प्राप्त करता है।

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h> /* for close() for socket */ 
#include <stdlib.h>

int main(void)
{
  int sock;
  struct sockaddr_in sa; 
  char buffer[1024];
  ssize_t recsize;
  socklen_t fromlen;

  memset(&sa, 0, sizeof sa);
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = htonl(INADDR_ANY);
  sa.sin_port = htons(7654);
  fromlen = sizeof sa;

  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (bind(sock, (struct sockaddr *)&sa, sizeof sa) == -1) {
    perror("error bind failed");
    close(sock);
    exit(EXIT_FAILURE);
  }

  for (;;) {
    recsize = recvfrom(sock, (void*)buffer, sizeof buffer, 0, (struct sockaddr*)&sa, &fromlen);
    if (recsize < 0) {
      fprintf(stderr, "%s\n", strerror(errno));
      exit(EXIT_FAILURE);
    }
    printf("recsize: %d\n ", (int)recsize);
    sleep(1);
    printf("datagram: %.*s\n", (int)recsize, buffer);
  }
}

<वाक्यविन्यास लैंग = सी हाइलाइट = 32,25,24>

  1. सम्मिलित <stdio.h>
  2. सम्मिलित <errno.h>
  3. सम्मिलित <string.h>
  4. सम्मिलित <sys/socket.h>
  5. सम्मिलित <sys/types.h>
  6. सम्मिलित <netinet/in.h>
  7. सम्मिलित <unistd.h> /* सॉकेट के लिए बंद () के लिए */
  8. सम्मिलित <stdlib.h>

पूर्णांक मुख्य (शून्य) {

 इंट सॉक;
 संरचना sockaddr_in sa;
 चार बफ़र [1024];
 ssize_t पुन: आकार;
 socklen_t fromlen;
 मेमसेट (और सा, 0, आकार का सा);
 sa.sin_family = AF_INET;
 sa.sin_addr.s_addr = htonl (INADDR_ANY);
 sa.sin_port = htons (7654);
 फ्रॉमलेन = साइज़ोफ़ सा;
 सॉक = सॉकेट (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 अगर (बाइंड (सॉक, (संरचना सॉकडैड्र *) और सा, साइजोफ सा) == -1) {
   पेरर (त्रुटि बाइंड विफल);
   करीब (जुर्राब);
   बाहर निकलें (EXIT_FAILURE);
 }
 के लिए (;;) {
   recsize = recvfrom(sock, (void*)buffer, sizeof बफर, 0, (struct sockaddr*)&sa, &fromlen);
   अगर (पुनरावृत्ति <0) {
     fprintf(stderr, %s\n , strerror(errno));
     बाहर निकलें (EXIT_FAILURE);
   }
   प्रिंटफ (पुनः आकार:% d \ n, (int) पुन: आकार);
   नींद (1);
   प्रिंटफ (डेटाग्राम:%। * एस \ n, (इंट) रिकसाइज, बफर);
 }

} </वाक्यविन्यास हाइलाइट>

क्लाइंट

यूडीपी पैकेट भेजने के लिए निम्न क्लाइंट प्रोग्राम है जिसमें स्ट्रिंग हैलो वर्ल्ड! पोर्ट नंबर 7654 पर 127.0.0.1 को संबोधित करने के लिए।

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>

int main(void)
{
  int sock;
  struct sockaddr_in sa;
  int bytes_sent;
  char buffer[200];
 
  strcpy(buffer, "hello world!");
 
  /* create an Internet, datagram, socket using UDP */
  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (sock == -1) {
      /* if socket failed to initialize, exit */
      printf("Error Creating Socket");
      exit(EXIT_FAILURE);
  }
 
  /* Zero out socket address */
  memset(&sa, 0, sizeof sa);
  
  /* The address is IPv4 */
  sa.sin_family = AF_INET;
 
   /* IPv4 addresses is a uint32_t, convert a string representation of the octets to the appropriate value */
  sa.sin_addr.s_addr = inet_addr("127.0.0.1");
  
  /* sockets are unsigned shorts, htons(x) ensures x is in network byte order, set the port to 7654 */
  sa.sin_port = htons(7654);
 
  bytes_sent = sendto(sock, buffer, strlen(buffer), 0,(struct sockaddr*)&sa, sizeof sa);
  if (bytes_sent < 0) {
    printf("Error sending packet: %s\n", strerror(errno));
    exit(EXIT_FAILURE);
  }
 
  close(sock); /* close the socket */
  return 0;
}

<वाक्यविन्यास प्रकाश लैंग = सी हाइलाइट = 40>

  1. सम्मिलित <stdlib.h>
  2. सम्मिलित <stdio.h>
  3. सम्मिलित <errno.h>
  4. सम्मिलित <string.h>
  5. सम्मिलित <sys/socket.h>
  6. सम्मिलित <sys/types.h>
  7. सम्मिलित <netinet/in.h>
  8. सम्मिलित <unistd.h>
  9. सम्मिलित <arpa/inet.h>

पूर्णांक मुख्य (शून्य) {

 इंट सॉक;
 संरचना sockaddr_in sa;
 इंट बाइट्स_सेंट;
 चार बफर [200];

 strcpy (बफर, हैलो वर्ल्ड!);

 / * UDP का उपयोग करके इंटरनेट, डेटाग्राम, सॉकेट बनाएं */
 सॉक = सॉकेट (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 अगर (सॉक == -1) {
     / * यदि सॉकेट आरंभ करने में विफल रहता है, तो बाहर निकलें * /
     प्रिंटफ (सॉकेट बनाने में त्रुटि);
     बाहर निकलें (EXIT_FAILURE);
 }

 / * सॉकेट पता शून्य करें * /
 मेमसेट (और सा, 0, आकार का सा);
 
 /* पता IPv4 है */
 sa.sin_family = AF_INET;

  /* IPv4 पता एक uint32_t है, ऑक्टेट के एक स्ट्रिंग प्रतिनिधित्व को उचित मान में बदलें */
 sa.sin_addr.s_addr = inet_addr (127.0.0.1);
 
 /* सॉकेट अहस्ताक्षरित शॉर्ट्स हैं, htons(x) सुनिश्चित करता है कि x नेटवर्क बाइट क्रम में है, पोर्ट को 7654 पर सेट करें */
 sa.sin_port = htons (7654);

 बाइट्स_सेंट = सेंडटो (सॉक, बफर, स्ट्रेल (बफर), 0, (संरचना सॉकडैडर *) और एस, साइजोफ सा);
 अगर (बाइट्स_सेंट <0) {
   प्रिंटफ (पैकेट भेजने में त्रुटि:% s \ n, स्ट्रेरर (त्रुटि));
   बाहर निकलें (EXIT_FAILURE);
 }

 करीब (जुर्राब); / * सॉकेट बंद करें * /
 वापसी 0;

} </वाक्यविन्यास हाइलाइट>

इस कोड में, बफ़र भेजे जाने वाले डेटा के लिए एक संकेतक है, और बफ़र_लेंथ डेटा के आकार को निर्दिष्ट करता है।

संदर्भ

  1. E. g. in the Ruby programming language ruby-doc::Socket
  2. "— POSIX.1-2008 specification". Opengroup.org. Retrieved 2012-07-26.
  3. "The Organization of Networks in Plan 9".
  4. "Linux TCP/IP stack as VFS plugin".
  5. Stevens & Rago 2013, p. 607.
  6. POSIX.1-2004
  7. gethostbyname(3) – FreeBSD Library Functions Manual
  8. Conill, Ariadne (March 27, 2022). "gethostbyname की त्रासदी". ariadne.space.
  9. nsswitch.conf(5) – FreeBSD File Formats Manual
  10. https://manpages.debian.org/experimental/ax25-tools/netrom.4.en.html. {{cite web}}: Missing or empty |title= (help)
  11. UNIX Network Programming Volume 1, Third Edition: The Sockets Networking API, W. Richard Stevens, Bill Fenner, Andrew M. Rudoff, Addison Wesley, 2003.
  12. "The Open Group Base Specifications Issue 7". Pubs.opengroup.org. Retrieved 2012-07-26.
  13. "TCP/IP raw sockets - Win32 apps".
  14. "बीज की नेटवर्क प्रोग्रामिंग के लिए गाइड". Beej.us. 2007-05-05. Retrieved 2012-07-26.
  15. "समापन सॉकेट". Softlab.ntua.gr. Retrieved 2012-07-26.
  16. "ntua.gr - Programming UNIX Sockets in C - Frequently Asked Questions: Questions regarding both Clients and Servers (TCP/SOCK_STREAM)". Softlab.ntua.gr. Retrieved 2012-07-26.

The de jure standard definition of the Sockets interface is contained in the पॉज़िक्स standard, known as:

  • IEEE Std. 1003.1-2001 Standard for Information Technology—Portable Operating System Interface (पॉज़िक्स).
  • Open Group Technical Standard: Base Specifications, Issue 6, December 2001.
  • ISO/IEC 9945:2002

Information about this standard and ongoing work on it is available from the Austin website.

The IPv6 extensions to the base socket API are documented in RFC 3493 and RFC 3542.


बाहरी संबंध