में tcpdump के साथ काम करना मैं 2.6.9-55.ELsmp, x86_64 चला रहे एक लिनक्स बॉक्स चला रहा हूं।टीसीपी को सी में विंडो प्राप्त करना और लिनक्स
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
कोड खंड के ऊपर ग्राहक कार्यक्रम है कि एक सर्वर से डेटा प्राप्त में है:
मैं टीसीपी स्थापित करने के लिए कोशिश कर रहा हूँ setsockopt() सी मैं निम्नलिखित की कोशिश का उपयोग कर समारोह का उपयोग करके खिड़की प्राप्त । जब मैं कार्यक्रम प्राप्त करते हैं और tcpdump उत्पादन निरीक्षण करने के लिए शुरू, मैं इतना की तरह खिड़की बातचीत पर ध्यान दें:
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>
हम देखते हैं कि क्लाइंट प्रोग्राम तथ्य एक खिड़की है कि मैं क्या क्लाइंट प्रोग्राम में निर्धारित किया है से अलग बातचीत कर रहा है। हालांकि, मैं स्टीवन के पाठ ("टीसीपी/आईपी इलस्ट्रेटेड, वॉल्यूम 1") की व्याख्या कैसे कर सकता हूं, धारा 20.4, मेरा मानना है कि आप धारा 20.4 में दूसरे ब्लॉक उद्धरण में संदर्भित करते हैं जो मैं सेटोकॉप्ट() कॉल का उपयोग करके करता हूं (ऊपर देखें)।
मैं समझना चाहता हूं कि मैं कहां गलत हो गया हूं।
शायद स्टीवन कह रहे हैं कि मेरी व्याख्या गलत है। उस स्थिति में, क्या आप मुझे बफर आकार प्राप्त करने के सही तरीके से इंगित कर सकते हैं? मेरे भ्रम के सबूत के रूप में, मैं लिनक्स टीसीपी सॉकेट मैन पेज को http://linux.die.net/man/7/tcp पर देखता हूं (SO_RCFBUF पर टिप्पणी देखें)।
मुझे इस कहानी में क्या याद आ रही है? मैं प्राप्त बफर आकार को नियंत्रित कैसे करूं (और यह tcpdump आउटपुट में दिखाया गया है)? कृपया ध्यान दें कि मैं यहां सॉकेट विकल्प SO_RCFBUF की एक सेटिंग का संकेत देता हूं - मैं समझता हूं कि एसईएन में विंडो वार्ता में क्या दिखाया गया है।
किसी भी इनपुट की सराहना की जाती है।
में कितना लंबित डेटा है, यह भी ध्यान दें कि न्यूनतम क्लैंप न्यूनतम आरसीवीबीयूएफ (आमतौर पर 4096 - तक न्यूनतम क्लैंप आमतौर पर 2048) तक सीमित है। – caf
मैंने इसे चेक किया, और संख्याएं न्यूनतम सेटटेबल CLAMP मान resp के लिए वास्तव में 256 और (इस प्रकार) 128 हैं। TCP_WINDOW_CLAMP के मामले में tcp.c :: setockopt() से कोड देखें, और sock.h :: # SOCK_MIN_RCVBUF 256 को परिभाषित करें।सभी को धन्यवाद। चीयर्स! – Sonny