From b5455cee6ec0d44c8e0c859d6c7c331210425dd6 Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 12 May 2015 20:13:17 +0000 Subject: [PATCH] SAM: Set keepalive on sockets (ticket #1573) Also on both sides of I2CP. BOB already does it. --- apps/sam/java/src/net/i2p/sam/SAMHandlerFactory.java | 1 + apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java | 1 + core/java/src/net/i2p/client/I2PSessionImpl.java | 2 ++ core/java/src/net/i2p/client/I2PSimpleSession.java | 1 + router/java/src/net/i2p/router/client/ClientListenerRunner.java | 1 + 5 files changed, 6 insertions(+) diff --git a/apps/sam/java/src/net/i2p/sam/SAMHandlerFactory.java b/apps/sam/java/src/net/i2p/sam/SAMHandlerFactory.java index fff86fe759..582854d870 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMHandlerFactory.java +++ b/apps/sam/java/src/net/i2p/sam/SAMHandlerFactory.java @@ -46,6 +46,7 @@ class SAMHandlerFactory { try { Socket sock = s.socket(); sock.setSoTimeout(HELLO_TIMEOUT); + sock.setKeepAlive(true); String line = DataHelper.readLine(sock.getInputStream()); sock.setSoTimeout(0); if (line == null) { diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java index a254d79a37..fe9561cedb 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java +++ b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java @@ -263,6 +263,7 @@ class SAMv3StreamSession extends SAMStreamSession implements SAMv3Handler.Sessi // build pipes between both sockets try { + clientServerSock.socket().setKeepAlive(true); if (this.verbose) SAMv3Handler.notifyStreamIncomingConnection( clientServerSock, i2ps.getPeerDestination()); diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java index ca193f77fa..542e08809d 100644 --- a/core/java/src/net/i2p/client/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/I2PSessionImpl.java @@ -488,6 +488,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 try { I2PSSLSocketFactory fact = new I2PSSLSocketFactory(_context, false, "certificates/i2cp"); _socket = fact.createSocket(_hostname, _portNum); + _socket.setKeepAlive(true); } catch (GeneralSecurityException gse) { IOException ioe = new IOException("SSL Fail"); ioe.initCause(gse); @@ -495,6 +496,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 } } else { _socket = new Socket(_hostname, _portNum); + _socket.setKeepAlive(true); } // _socket.setSoTimeout(1000000); // Uhmmm we could really-really use a real timeout, and handle it. OutputStream out = _socket.getOutputStream(); diff --git a/core/java/src/net/i2p/client/I2PSimpleSession.java b/core/java/src/net/i2p/client/I2PSimpleSession.java index b6f8bb7eb4..ce0ef254f3 100644 --- a/core/java/src/net/i2p/client/I2PSimpleSession.java +++ b/core/java/src/net/i2p/client/I2PSimpleSession.java @@ -89,6 +89,7 @@ class I2PSimpleSession extends I2PSessionImpl2 { } else { _socket = new Socket(_hostname, _portNum); } + _socket.setKeepAlive(true); OutputStream out = _socket.getOutputStream(); out.write(I2PClient.PROTOCOL_BYTE); out.flush(); diff --git a/router/java/src/net/i2p/router/client/ClientListenerRunner.java b/router/java/src/net/i2p/router/client/ClientListenerRunner.java index 8510fa0719..e88339b0e1 100644 --- a/router/java/src/net/i2p/router/client/ClientListenerRunner.java +++ b/router/java/src/net/i2p/router/client/ClientListenerRunner.java @@ -93,6 +93,7 @@ class ClientListenerRunner implements Runnable { if (validate(socket)) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Connection received"); + socket.setKeepAlive(true); runConnection(socket); } else { if (_log.shouldLog(Log.WARN))