From eec9a1c03ef95988c42f79f1222978f22cda51f6 Mon Sep 17 00:00:00 2001 From: rpcheung Date: Fri, 1 May 2020 13:34:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96TCP=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cheung/shadowsocks/common/ClientProxy.java | 5 ++++- .../cheung/shadowsocks/proxy/InternetDataHandler.java | 10 +++++----- .../cheung/shadowsocks/server/ShadowsocksServer.java | 5 +++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/cheung/shadowsocks/common/ClientProxy.java b/src/main/java/com/cheung/shadowsocks/common/ClientProxy.java index 74d1876..07f53bb 100644 --- a/src/main/java/com/cheung/shadowsocks/common/ClientProxy.java +++ b/src/main/java/com/cheung/shadowsocks/common/ClientProxy.java @@ -28,7 +28,10 @@ public void init() { .channel(EpollSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000) - .option(ChannelOption.SO_KEEPALIVE,true) + .option(ChannelOption.SO_TIMEOUT, 120 * 1000) + .option(ChannelOption.SO_SNDBUF, 128 * 5 * 120 * 1024) + .option(ChannelOption.SO_RCVBUF, 128 * 5 * 120 * 1024) + .option(ChannelOption.SO_KEEPALIVE, true) .option(ChannelOption.AUTO_READ, true); } diff --git a/src/main/java/com/cheung/shadowsocks/proxy/InternetDataHandler.java b/src/main/java/com/cheung/shadowsocks/proxy/InternetDataHandler.java index 5aa347e..62b1ef3 100755 --- a/src/main/java/com/cheung/shadowsocks/proxy/InternetDataHandler.java +++ b/src/main/java/com/cheung/shadowsocks/proxy/InternetDataHandler.java @@ -63,15 +63,15 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - Channel channel = getClientProxyChannel(ctx).channel(); + ChannelHandlerContext context = getClientProxyChannel(ctx); // 等待 发送缓冲区 的 数据发送完 为减少 Connection reset by peer - while ((channel != null) && (channel.isActive()) && (!(channel.unsafe().outboundBuffer().isEmpty()))) { - Thread.sleep(2000); - } +// while ((channel != null) && (channel.isActive()) && (!(channel.unsafe().outboundBuffer().isEmpty()))) { +// Thread.sleep(2000); +// } ctx.close(); - getClientProxyChannel(ctx).close(); + context.close(); logger.info("InternetDataHandler channelInactive close Interview address = {}", ctx.channel().remoteAddress()); } diff --git a/src/main/java/com/cheung/shadowsocks/server/ShadowsocksServer.java b/src/main/java/com/cheung/shadowsocks/server/ShadowsocksServer.java index c269ab2..648dac8 100644 --- a/src/main/java/com/cheung/shadowsocks/server/ShadowsocksServer.java +++ b/src/main/java/com/cheung/shadowsocks/server/ShadowsocksServer.java @@ -45,6 +45,11 @@ public void start() { .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000) .childOption(ChannelOption.AUTO_READ, true) .childOption(ChannelOption.SO_KEEPALIVE, true) + .childOption(ChannelOption.SO_LINGER, 2) + .childOption(ChannelOption.SO_BACKLOG, 1024) + .childOption(ChannelOption.SO_TIMEOUT, 120 * 1000) + .childOption(ChannelOption.SO_SNDBUF, 128 * 5 * 120 * 1024) + .childOption(ChannelOption.SO_RCVBUF, 128 * 5 * 120 * 1024) .childOption(ChannelOption.TCP_NODELAY, true); bootstrap.childHandler(new ChannelInitializer() {