2012-08-01 17 views
7

मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जहां एक ग्राहक एक टीसीपी कनेक्शन से जुड़ता है जो तब काम की मात्रा को ट्रिगर करता है जो संभवतः पूरा करने में काफी समय ले सकता है। यदि उपयोगकर्ता टीसीपी कनेक्शन छोड़ देता है तो यह काम रद्द कर दिया जाना चाहिए।नेटवर्क स्ट्रीम में शून्य बाइट्स लिखना बंद कनेक्शन का पता लगाने के लिए एक विश्वसनीय तरीका है?

वर्तमान में, क्या मैं कर रहा हूँ एक टाइमर है कि समय-समय पर नेटवर्क की जाँच करता है ऊपर शुरू कर रहा है ऐसा करने से कनेक्टिविटी धाराओं:

// stream is a Stream instance 
var abort = false; 
using (new Timer(x => { 
    try 
    { 
     stream.Write(new byte[0], 0, 0); 
    } 
    catch (Exception) 
    { 
     abort = true; 
    } 
}, null, 1000, 1000)) 
{ 
    // Do expensive work here and check abort periodically 
} 

मैं पढ़ना पसंद आया है | CanWrite, CanRead या Connected पर वे रिपोर्ट धारा की अंतिम स्थिति। शून्य बाइट्स को कनेक्टिविटी का परीक्षण करने का एक विश्वसनीय तरीका लिख ​​रहा है, या क्या यह स्वयं मुद्दों का कारण बन सकता है? मैं धारा पर किसी भी वास्तविक डेटा को लिख या पढ़ नहीं सकता क्योंकि यह क्लाइंट को गड़बड़ कर देगा।

उत्तर

3

चलो बस कहना है कि मैंने इसे काम करने के लिए दशकों पहले जाना है, लेकिन इसका कोई आंतरिक कारण क्यों नहीं होना चाहिए। आप और टीसीपी ढेर के बीच एपीआई परतों के किसी भी नीचे अगले परत करने के लिए कॉल को दबाने के लिए हकदार है, और भले ही वह ढेर में सभी तरह से हो जाता है कि यह केवल एक त्रुटि वापस आ जाएगी, तो:

  1. यह जाँच करता है शून्य लंबाई की जांच करने से पहले नेटवर्क त्रुटियों के लिए, जो कार्यान्वयन-निर्भर है, और
  2. कुछ पिछले ऑपरेशन, या आने वाले आरएसटी के कारण पहले ही नेटवर्क त्रुटि थी।

यदि आप उम्मीद कर रहे हैं कि यह नेटवर्क को दूसरी तरफ जादुई रूप से जांचने की उम्मीद है, तो यह निश्चित रूप से नहीं होगा।

+0

ऐसा लगता है कि मेरे लिए काम करता है, लेकिन मैं आपका बिंदु देख सकता हूं। मैं इसे सभी तरह से जांचने की उम्मीद नहीं कर रहा हूं, लेकिन अगर यह थोड़ा रास्ता तय करता है तो शायद यह काफी अच्छा होगा। कहीं कहीं मूल ध्वज होना चाहिए जो कहता है कि अगर रीसेट कनेक्शन रहा है तो? एक घटना या कुछ वास्तव में अच्छा होगा। – Dervall

+0

@Dervall स्टैक जानता है कि रीसेट किया गया है, लेकिन मैंने कभी भी अपने जीवन में एक टीसीपी एपीआई नहीं देखा है जो आपको यह देगा। त्रुटियों को प्राप्त करने के लिए आपको एक टीसीपी कनेक्शन पर I/O करना है। यह वास्तव में इस तरह से डिजाइन किया गया है: 'कोई डायल टोन' नहीं। इंटरमीडिएट नोड विफलताओं और पुनः रूटिंग से बचने के लिए बनाया गया। – EJP

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

  • कोई संबंधित समस्या नहीं^_^