मैं एक प्रोग्राम बना रहा हूं जो सभी ट्रैफिक पढ़ने के लिए रॉ सॉकेट बनाता है। सॉकेट() और recvfrom() के कॉल के बीच (आखिरी एक बफर से सभी पैकेट निकालने के लिए एक लूप में है) मैं 5s इंतजार करता हूं।SO_RCVBUF का मूल्य क्यों बदलता नहीं है?
जब मैं प्रोग्राम चलाता हूं, तो मैं अपने प्रोग्राम में «तेज मोड» (तेजी से बफर भरने के लिए) में hping3 कमांड के साथ लगभग 200 पैकेट भेजता हूं। जैसे ही 5s समाप्त हो जाते हैं, मेरा प्रोग्राम बफर से लगभग 150 पैकेट निकालता है।
मैं प्राप्त बफर के आकार बदलने के लिए बेहतर परिणाम प्राप्त करने की कोशिश:
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
हालांकि, जो कुछ «एक», 1 या 10000000 का मूल्य है, यह कुछ भी बदल जाता है, मैं अभी भी लगता है ~ बफर से 150 पैकेट।
समस्या क्या है?
संपादित करें: «ए» का मान getsockopt
कॉल के साथ सत्यापित किया गया है।
क्या आप हमें अधिक सॉकेट दिखा सकते हैं, जिसमें 'सॉकेट() 'आदि के लिए प्रासंगिक कॉल शामिल हैं? हमें बताएं कि आपके ऑपरेटिंग सिस्टम भी मदद कर सकते हैं। –
निश्चित रूप से, मैं इस प्रोग्राम को लिनक्स 3.2 64 बिट्स के तहत चलाता हूं। 'सॉकेट() ':' sockfd = सॉकेट (AF_INET, SOCK_RAW, IPPROTO_TCP)' – Flow