2012-05-20 3 views
7

मेरे पास एक क्लाइंट एप्लिकेशन है, जो किसी सर्वर के साथ संचार करने के लिए एक अप्रबंधित डीएल का उपयोग करता है।एक सॉकेट को बंद करने, मारने, रिलीज़ करने के लिए कैसे करें, जो कि FIN_WAIT_2 स्थिति में है?

सभी नेटवर्क-संबंधी संचालन अप्रबंधित dll के अंदर perormed कर रहे हैं। सर्वर के साथ कई संचालन के बाद, ग्राहक टीसीपी बंदरगाहों से बाहर चल रहा है।

... 
TCP 192.168.11.55:56048 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56049 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56050 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56051 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56052 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56053 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56054 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56055 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56056 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56057 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56058 192.168.10.27:5000  FIN_WAIT_2 
TCP 192.168.11.55:56059 192.168.10.28:5000  FIN_WAIT_2 
TCP 192.168.11.55:56060 192.168.10.27:5000  FIN_WAIT_2 
... 

बंदरगाहों केवल जारी कर रहे हैं के बाद ग्राहक को बंद कर दिया जाता है: हम 'netstat -एक' का उपयोग कर netwotk की स्थिति जांचने तो हम निम्न परिणाम मिलता है।

यदि मैं डीबग मोड में वीएस प्रोजेक्ट चलाता हूं, तो यह बंदरगाहों को कभी नहीं चलाता है। लेकिन, रिलीज मोड में चलते समय, यह हो रहा है।

और मैं सर्वर और न ही ग्राहक स्रोत के लिए न पहुँच नहीं है।

कैसे जारी या उन बंदरगाहों जो FIN_WAIT_2 स्थिति में हैं को मारने के लिए?

उत्तर

7

जब कोई सॉकेट FIN_WAIT_2 में होती है, तो स्थानीय सॉकेट बंद हो जाती है और दूरस्थ सॉकेट को उनके करीबी अनुरोध भेजने की प्रतीक्षा कर रहा है। यदि यह करीबी अनुरोध कभी नहीं आता है, तो सॉकेट थोड़ी देर के लिए FIN_WAIT_2 स्थिति में रहेगी।

इसका कारण यह है कि अगर रिमोट पार्टी से घनिष्ठ अनुरोध में देरी हो जाएगी और किसी अन्य एप्लिकेशन के बाद पहुंचने के बाद सॉकेट का पुन: उपयोग किया जाएगा, तो नया कनेक्शन तत्काल बंद हो जाएगा।

यदि आप चाहें तो टाइमआउट बदल सकते हैं, लेकिन अंत में अप्रबंधित डीएलएल ने पूरी तरह से टीसीपी शटडाउन अनुक्रम लागू नहीं किया है। अधिक जानकारी के लिए देख

http://answers.microsoft.com/en-us/windows/forum/windows_7-networking/how-to-close-finwait2-connections-except-reboot/ba2fed9f-8b61-4b71-ab5b-d39dc9a387e3

+0

स्थापना टाइमआउट मदद किया था, लेकिन बहुत ज्यादा नहीं। अंत में हम ग्राहक पक्ष में TCP_NODELAY पैरामीटर सेट करके समस्या को हल करने में सक्षम थे। धन्यवाद। – ulughbekula

+0

मैक ओएस एक्स के बारे में क्या? –

1

सर्वर साइड सॉकेट 0 bytes पढ़ा जाएगा जब आप बंद/ग्राहक सॉकेट बंद कर दें।
इस बिंदु पर, आपको सर्वर सॉकेट को बंद/बंद करना चाहिए। आपका कनेक्शन TIME_WAITPID0 के साथ दिखाएगा और अंत में चलेगा।

मुझे लगता है कि के रूप में यह हो जाता है के रूप में अच्छा है। न्यूनतम मूल्य को

संबंधित मुद्दे