1) Apa perbedaan antara koneksi dan batas waktu baca untuk soket?
Timeout koneksi adalah timeout dalam membuat koneksi awal; yaitu menyelesaikan handshake koneksi TCP. Batas waktu baca adalah batas waktu menunggu untuk membaca data 1 . Khususnya, jika server gagal mengirim byte <timeout> detik setelah byte terakhir, kesalahan batas waktu baca akan dinaikkan.
2) Apa artinya batas waktu koneksi diatur ke "tak terbatas"? Dalam situasi apa ia bisa tetap dalam infinitive loop? dan apa yang dapat memicu bahwa infinity-loop mati?
Ini berarti bahwa upaya koneksi berpotensi memblokir selamanya. Tidak ada loop tanpa batas, tetapi upaya untuk terhubung dapat diblokir oleh utas lain yang menutup soket. ( Thread.interrupt()
Panggilan juga dapat melakukan trik ... tidak yakin.)
3) Apa yang dimaksud dengan batas waktu baca yang diatur ke "tak terbatas"? Dalam situasi apa ia bisa tetap berada dalam satu lingkaran tanpa batas? Apa yang bisa memicu loop tak terbatas itu berakhir?
Ini berarti bahwa panggilan ke read
pada aliran soket dapat memblokir selamanya. Sekali lagi tidak ada loop tak terbatas, tetapi read
dapat diblokir oleh Thread.interrupt()
panggilan, menutup soket, dan (tentu saja) ujung lainnya mengirim data atau menutup koneksi.
1 - Ini bukan ... seperti yang dipikirkan oleh seorang komentator ... batas waktu berapa lama sebuah soket dapat dibuka, atau diam.
HttpURLConnection.getResponseCode()
tergantung untuk apprx. seminggu sampai kami memulai kembali prosesnya. Jelas tidak ada batas waktu yang ditetapkan pada sisi JVM dan juga tidak ada batas waktu di sisi Linux OS.Socket.shutdownInput()
tanpa memegang tangan Anda? NB Timeout ini diberlakukan oleh TCP, bukan JVM.