मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जहां एक ग्राहक एक टीसीपी कनेक्शन से जुड़ता है जो तब काम की मात्रा को ट्रिगर करता है जो संभवतः पूरा करने में काफी समय ले सकता है। यदि उपयोगकर्ता टीसीपी कनेक्शन छोड़ देता है तो यह काम रद्द कर दिया जाना चाहिए।नेटवर्क स्ट्रीम में शून्य बाइट्स लिखना बंद कनेक्शन का पता लगाने के लिए एक विश्वसनीय तरीका है?
वर्तमान में, क्या मैं कर रहा हूँ एक टाइमर है कि समय-समय पर नेटवर्क की जाँच करता है ऊपर शुरू कर रहा है ऐसा करने से कनेक्टिविटी धाराओं:
// 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
पर वे रिपोर्ट धारा की अंतिम स्थिति। शून्य बाइट्स को कनेक्टिविटी का परीक्षण करने का एक विश्वसनीय तरीका लिख रहा है, या क्या यह स्वयं मुद्दों का कारण बन सकता है? मैं धारा पर किसी भी वास्तविक डेटा को लिख या पढ़ नहीं सकता क्योंकि यह क्लाइंट को गड़बड़ कर देगा।
ऐसा लगता है कि मेरे लिए काम करता है, लेकिन मैं आपका बिंदु देख सकता हूं। मैं इसे सभी तरह से जांचने की उम्मीद नहीं कर रहा हूं, लेकिन अगर यह थोड़ा रास्ता तय करता है तो शायद यह काफी अच्छा होगा। कहीं कहीं मूल ध्वज होना चाहिए जो कहता है कि अगर रीसेट कनेक्शन रहा है तो? एक घटना या कुछ वास्तव में अच्छा होगा। – Dervall
@Dervall स्टैक जानता है कि रीसेट किया गया है, लेकिन मैंने कभी भी अपने जीवन में एक टीसीपी एपीआई नहीं देखा है जो आपको यह देगा। त्रुटियों को प्राप्त करने के लिए आपको एक टीसीपी कनेक्शन पर I/O करना है। यह वास्तव में इस तरह से डिजाइन किया गया है: 'कोई डायल टोन' नहीं। इंटरमीडिएट नोड विफलताओं और पुनः रूटिंग से बचने के लिए बनाया गया। – EJP