1) कनेक्शन के बीच अंतर क्या है और सॉकेट्स के लिए टाइमआउट पढ़ें?
प्रारंभिक कनेक्शन बनाने में टाइमआउट कनेक्शन टाइमआउट है; यानी टीसीपी कनेक्शन हैंडशेक पूरा करना। डेटा पढ़ने के लिए प्रतीक्षा समय 1 पर रीडआउट टाइमआउट है । विशेष रूप से, यदि सर्वर अंतिम बाइट के बाद एक बाइट <timeout> सेकंड भेजने में विफल रहता है, तो रीड टाइमआउट त्रुटि उठाई जाएगी।
2) "अनन्तता" से क्या तात्पर्य कनेक्शन टाइमआउट है? किस स्थिति में यह एक अनन्त लूप में रह सकता है? और क्या हो सकता है कि अनंत-पाश मर जाए?
इसका अर्थ है कि कनेक्शन का प्रयास संभावित रूप से हमेशा के लिए ब्लॉक हो सकता है। कोई अनंत लूप नहीं है, लेकिन कनेक्ट करने का प्रयास सॉकेट को बंद करने वाले किसी अन्य थ्रेड द्वारा अनब्लॉक किया जा सकता है। (एक Thread.interrupt()
कॉल भी कर सकती है चाल ... सुनिश्चित नहीं है।)
3) "अनन्तता" का अर्थ क्या है? वह किस स्थिति में अनंत पाश में रह सकता है? क्या अनंत लूप को समाप्त करने के लिए ट्रिगर कर सकता है?
इसका मतलब है कि read
सॉकेट स्ट्रीम पर कॉल हमेशा के लिए ब्लॉक हो सकती है। एक बार फिर कोई अनंत लूप नहीं है, लेकिन सॉकेट को बंद करके, और निश्चित रूप से डेटा भेजने या कनेक्शन को बंद करने वाले कॉल को read
अनब्लॉक किया जा सकता है Thread.interrupt()
।
1 - ऐसा नहीं है ... जैसा कि एक टिप्पणीकार ने सोचा ... एक सॉकेट कितने समय तक खुला रह सकता है, या निष्क्रिय।
HttpURLConnection.getResponseCode()
apprx के लिए लटका हुआ था। एक सप्ताह तक जब तक हम प्रक्रिया को फिर से शुरू नहीं करते। स्पष्ट रूप से जेवीएम की ओर से कोई टाइमआउट सेट नहीं किया गया था और साथ ही लिनक्स ओएस की ओर से कोई टाइमआउट नहीं किया गया था।