java सॉकेटटाइम बनाम कनेक्शनटाइमआउट




android tcp (2)

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

व्यक्तिगत पैकेट की प्रतीक्षा करते समय सॉकेट टाइमआउट टाइमआउट होता है। यह एक आम गलत धारणा है कि एक सॉकेट टाइमआउट पूर्ण प्रतिक्रिया प्राप्त करने का समय है। तो यदि आपके पास 1 सेकंड का सॉकेट टाइमआउट है, और 3 आईपी पैकेट्स में एक प्रतिक्रिया शामिल है, जहां प्रत्येक प्रतिक्रिया पैकेट को 0.9 सेकंड लगते हैं, तो 2.7 सेकेंड के कुल प्रतिक्रिया समय के लिए, तो कोई टाइमआउट नहीं होगा।

मुझे एक लाइब्रेरी में समस्या है जिसमें मैं उपयोग कर रहा हूं। यह पुस्तकालय हो सकता है या यह मुझे गलत इस्तेमाल कर सकता है!

असल में, जब मैं ऐसा करता हूं (मिलीसेकंड में टाइमआउट)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000);  // 60 seconds

कोई टाइमआउट अपवाद उत्पन्न नहीं होता है और यह ठीक काम करता है, हालांकि, जब मैं निम्नलिखित करता हूं,

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1);          // v short

मुझे सॉकेट अपवाद मिलता है।

तो, मेरा सवाल यह है कि मैं कनेक्शन अपवाद क्यों अनुकरण नहीं कर सकता? क्या मैं सॉकेट और कनेक्शन टाइम-आउट के बीच अंतर को गलत समझ रहा हूं? पुस्तकालय here (आधिकारिक तौर पर अभी तक जारी नहीं किया गया है)।


एक कनेक्शन टाइमआउट केवल टीसीपी कनेक्शन शुरू करने पर होता है। यह आमतौर पर तब होता है जब रिमोट मशीन उत्तर नहीं देती है। इसका मतलब है कि सर्वर बंद कर दिया गया है, आपने गलत आईपी / DNS नाम या सर्वर से नेटवर्क कनेक्शन का उपयोग किया है।

एक सॉकेट टाइमआउट निरंतर आने वाले डेटा प्रवाह की निगरानी के लिए समर्पित है। यदि निर्दिष्ट समय समाप्ति के लिए डेटा प्रवाह बाधित होता है तो कनेक्शन को स्टॉल / टूटा हुआ माना जाता है। बेशक यह केवल उन कनेक्शनों के साथ काम करता है जहां डेटा हर समय प्राप्त होता है।

सॉकेट टाइमआउट को 1 तक सेट करके यह आवश्यक होगा कि प्रत्येक मिलीसेकंद नया डेटा प्राप्त हो (मान लीजिए कि आप डेटा ब्लॉक को पढ़ते हैं और ब्लॉक काफी बड़ा है)!

यदि केवल आने वाली स्ट्रीम एक मिलीसेकंड से अधिक के लिए स्टाल करती है तो आप एक टाइमआउट में चल रहे हैं।





httpconnection