मुझे दस्तावेज़ों को खोजने में कुछ परेशानी हो रही है कि तीसरे तर्क के लिए socket
पर इन सेटिंग्स के बीच भेद क्या है। मैं टीसीपी और यूडीपी और उनके मतभेदों के बारे में जानता हूं और यह भी कि आईपी एक परत ऊपर (नीचे?) स्टैक पर है ... मेरा यूडीपी कोड उसी तरह काम करता है चाहे मैं इसे IPPROTO_IP
या IPPROTO_UDP
पर सेट करता हूं।IPPROTO_IP बनाम IPPROTO_TCP/IPPROTO_UDP
उत्तर
प्रलेखन ip(7)
निर्दिष्ट करता है कि आप यूडीपी और 0
या IPPROTO_TCP
टीसीपी के लिए के लिए 0
या IPPROTO_UDP
उपयोग करने के लिए है कि सहित विभिन्न manpages बीच विभाजित है। जब आप 0
का उपयोग करते हैं, जो IPPROTO_IP
का मान होता है, तो यूडीपी SOCK_DGRAM
के लिए उपयोग किया जाता है और टीसीपी SOCK_STREAM
के लिए उपयोग किया जाता है।
मेरी राय में स्वच्छ रास्ता एक यूडीपी या टीसीपी आईपीवी 4 सॉकेट वस्तु बनाने के लिए इस प्रकार है:
int sock_udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
int sock_tcp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
कारण यह है कि यह आम तौर पर स्पष्ट होना बेहतर निहित से है। इस विशिष्ट मामले में 0
या तीसरे तर्क के लिए IPPROTO_IP
का उपयोग करके आपको कुछ भी लाभ नहीं मिलता है।
यह भी एक प्रोटोकॉल का उपयोग करने की कल्पना करें जो sctp जैसे स्ट्रीम और डेटाग्राम दोनों कर सकता है। हमेशा सॉकटाइप और प्रोटोकॉल दोनों निर्दिष्ट करके आप किसी भी अस्पष्टता से सुरक्षित हैं।
IPPROTO_IP
कच्चे आईपी पैकेट के लिए है। टीसीपी और यूडीपी प्रोटोकॉल आईपी पर आधारित हैं। यदि आप कच्चे आईपी सॉकेट खोलते हैं, तो आप सभी आईपी बाइट्स को स्वयं इकट्ठा करने के लिए ज़िम्मेदार हैं। कच्चे आईपी सॉकेट खोलने के लिए आपको विशेषाधिकार प्राप्त पहुंच की आवश्यकता हो सकती है।
: socket()
लिनक्स पर के लिए
/*
* Protocols (RFC 1700)
*/
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_TCP 6 /* tcp */
- 1. बनाम बनाम
- 2. : बनाम बनाम ::
- 3. स्पाइडरमोन्की बनाम जावास्क्रिप्ट बनाम बनाम?
- 4. Mercurial: भ्रष्टाचार बनाम रिकॉर्ड बनाम qrecord बनाम शेल्व बनाम प्रत्यारोपण बनाम dirstate बनाम कतार
- 5. LINQ बनाम लैम्ब्डा बनाम अज्ञात तरीके बनाम बनाम
- 6. एनएचबीर्नेट एचक्यूएल बनाम मानदंड बनाम क्वेरीरी बनाम लिंक बनाम। प्रदर्शन
- 7. डीकोड और व्याख्या को बनाम बनाम बनाम बनाम
- 8. इनलाइन बनाम __inline बनाम __inline__ बनाम __forceinline बनाम?
- 9. एपीआई बनाम टूलकिट बनाम फ्रेमवर्क बनाम लाइब्रेरी
- 10. pymssql बनाम pyodbc बनाम adodbapi बनाम ...
- 11. एटमिकोस बनाम जेओटीएम बनाम बिट्रोनिक्स बनाम?
- 12. न्यूट बनाम एमबीयूनीट बनाम एमएसटीएस्ट बनाम xUnit.net
- 13. विधि बनाम फंक्शन बनाम प्रक्रिया बनाम कक्षा?
- 14. .NET बनाम एएसपी.नेट बनाम सीएलआर बनाम एएसपी
- 15. 'विधि' बनाम 'संदेश' बनाम 'फ़ंक्शन' बनाम '???'
- 16. अक्ष 2 बनाम वसंत-बनाम बनाम जर्सी
- 17. एसीई बनाम बूस्ट बनाम पोको बनाम WxWidgets
- 18. control.BeginInvoke() बनाम डिस्पैचर बनाम SynchronizationContext बनाम .. - विश्वसनीयता
- 19. ड्रॉप ... बनाम बनाम
- 20. रेल बनाम बनाम
- 21. _Expand बनाम बनाम जीएनयू
- 22. एफ़टीपी कमांड्स बनाम बनाम
- 23. गिट में बनाम बनाम
- 24. फ़ाइल बनाम ब्लॉक बनाम
- 25. क्रिस्टलस्पेस बनाम इरलिच बनाम .....?
- 26. एएसएसईआर बनाम एटलसैट बनाम
- 27. NetSqlAzMan बनाम AzMan बनाम (?????)
- 28. प्रतिनिधि बनाम बनाम। आईफोनओएस
- 29. और बनाम * और | बनाम +
- 30. Exec बनाम ExecWait बनाम ExecShell बनाम nsExec :: Exec बनाम nsExec :: ExecToLog बनाम nsExec :: ExecToStack बनाम ExecDos बनाम ExeCmd
जब मैंने कच्चे आईपी सॉकेट को खोला तो मेरा यूडीपी कोड अभी भी ठीक काम करता है? –
क्योंकि कई परिस्थितियों में तीसरे तर्क को नजरअंदाज कर दिया जाता है। – bmargulies
[एमएसडीएन] के अनुसार (http://msdn.microsoft.com/en-us/library/ms740506 (VS.85) .aspx): 'यदि 0 का मान निर्दिष्ट है, तो कॉलर एक निर्दिष्ट नहीं करना चाहता प्रोटोकॉल और सेवा प्रदाता प्रोटोकॉल का उपयोग करने के लिए चुनेंगे। ' –