Soket Programlama java - soket bağlantısı ne kadar süredir yaşıyor? Ve nasıl kontrol edebilirim?

Soket üzerinde herhangi bir işlem yapmazsam nasıl bir soket bağlantısı kurabilirim biliyor musunuz? Sadece bağlantım arka plandaysa ve onu çalıştırmazsam şunu anlarım:

java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.writeInt(Unknown Source)

Öyleyse, boşta kalma süresinden sonra bağlantının kaybolmayacağını ve varsayılan olarak ne kadar süre kaldığını kontrol edebilir miyim?

1
@ KlasLindbäck Hayır değil. Buradaki acil sorun bir sıfırlamadır.
katma yazar EJP, kaynak
katma yazar Klas Lindbäck, kaynak

2 cevap

Bu problemin genel bir çözümü yoktur. TCP/IP bağlantısını sıfırlamaya/kapatmaya karar vermiş olan uzak sunucu/servis olması oldukça olasıdır. Nasıl ve neden karar vermesi, uygulamaya özeldir. Bunu önlemek için uygulamaya özel bir çözüm gerekli olacaktır.

FWIW, SO_KEEP_ALIVE mekanizması, protokol yığınının, boşta olan bir TCP/IP bağlantısında ara sıra mesaj alışverişi yapmasına neden olur. Bağlantı noktası yeniden kullanım nedeniyle bir NAT bağlantılı bağlantıda sıfırlama yapıyorsanız, bu yardımcı olabilir. İlgili Java yöntemi Socket.setKeepAlive .

2
katma
Kalıcı zaman aşımı süresini kontrol etmek için herhangi bir yolu?
katma yazar MeBigFatGuy, kaynak
tamam teşekkürler, belirttiğiniz mekanizma ile ilgili herhangi bir bağlantınız var, deneyebilirim, ubuntu 10 üzerinde sunucumu çalıştırıyorum eğer bu yardımcı olursa.
katma yazar Mulder, kaynak

Bağlantı eş tarafından sıfırlandı: soket yazma hatası

Bu genellikle akran tarafından zaten kapatılmış bir bağlantıya yazılmasından kaynaklanır. Bir uygulama protokol hatasıdır. Bağlantı ömürleri hakkında endişelenmeden önce bunu araştırmalısınız.

1
katma