c - rawsocket sendto() some of the packet are dropped and not seen in the network -
socketFd_ = सॉकेट (AF_INET, SOCK_RAW, प्रोटोटाइप); SentBytes = sendto (socketFd_, buf, len, 0, (struct sockaddr *) और साइ, आकार (structsockaddr_in)); प्रोटोटाइप = जीआरई मैं नेटवर्क में 1000 पैकेट भेज रहा हूं। यदि मेरा टीएक्स पैकेट दर 40 है, तो मैं तारों के पैकेट में सभी पैकेट देखने में सक्षम हूं। हालांकि जब मैं 100 के कुछ पैकेट (3-4) की दर से भेजने की कोशिश करता हूं तो नेटवर्क में नहीं पहुंच जाएगा, लेकिन sendto ने कोई त्रुटि नहीं लौटाई मुझे पता है कि sendto सिर्फ कतार में txpacket डाल दिया जाएगा और नेटवर्क में पैकेट की डिलीवरी की गारंटी नहीं होगी, लेकिन जहां से मैं ड्रॉप पैकेट आंकड़े और कर्नेल में पैकेट ड्रॉप के कारण मिल सकता है। मैंने 65000 इंटरफेस के टक्सस्कुएलेन को बढ़ाने की कोशिश की है, लेकिन इसकी मदद नहीं की। मैं इस मुद्दे को डिबग कैसे कर सकता हूं?।
आप सही हैं कि sendto सिर्फ कतार में txpacket डाल देंगे और डिलीवरी की गारंटी नहीं।
sendto पर iEEE दस्तावेज़ीकरण से:
sendto को कॉल के सफल समापन संदेश की डिलीवरी की गारंटी नहीं देता है। 1 का रिटर्न वैल्यू केवल स्थानीय रूप से पता चला गई त्रुटियों को इंगित करता है। आपको अपनी कुछ थ्रॉटलिंग को ioctl () और होक्कोप () के माध्यम से करना होगा क्योंकि आप लगभग कर रहे हैं। मुझे नहीं लगता कि आप नेटवर्क स्टैक को आपके लिए यह सब करने की उम्मीद कर सकते हैं।
sendMsgThrottled (msg संदेश) {ioctl (socketFd_, SIOCOUTQ, & amp; outstandingBytes); यदि (आउटस्टैंडिंगबेट्स और लिफ्ट; सीमा) sendto (socketFd_, ..) और कतार संदेश (); / * या देरी * /} मैं एक ही मशीन पर भेजने और रिसीवर के साथ यह परीक्षण करेगा, पैकेट नुकसान ऑपरेटिंग सिस्टम की नेटवर्क परत के अलावा अन्य स्थानों से आ सकता है।
Comments
Post a Comment