diff --git a/src/org/redkale/net/AsyncConnection.java b/src/org/redkale/net/AsyncConnection.java index d9db00dec..85c460acc 100644 --- a/src/org/redkale/net/AsyncConnection.java +++ b/src/org/redkale/net/AsyncConnection.java @@ -469,6 +469,10 @@ public abstract class AsyncConnection implements AsynchronousByteChannel, AutoCl return new NIOTCPAsyncConnection(ch, addr, selector, readTimeoutSeconds0, writeTimeoutSeconds0, null, null); } + public static AsyncConnection create(final SocketChannel ch, final SocketAddress addr0, final Selector selector, final Context context) { + return new NIOTCPAsyncConnection(ch, addr0, selector, context.readTimeoutSeconds, context.writeTimeoutSeconds, null, null); + } + public static AsyncConnection create(final SocketChannel ch, SocketAddress addr, final Selector selector, final int readTimeoutSeconds0, final int writeTimeoutSeconds0, final AtomicLong livingCounter, final AtomicLong closedCounter) { diff --git a/src/org/redkale/net/ProtocolServer.java b/src/org/redkale/net/ProtocolServer.java index ebc725f29..d19c8af0b 100644 --- a/src/org/redkale/net/ProtocolServer.java +++ b/src/org/redkale/net/ProtocolServer.java @@ -420,7 +420,7 @@ public abstract class ProtocolServer { } public void addChannel(SocketChannel channel) throws IOException { - AsyncConnection conn = AsyncConnection.create(channel, null, this.selector, 0, 0); + AsyncConnection conn = AsyncConnection.create(channel, null, this.selector, context); context.runAsync(new PrepareRunner(context, conn, null, null)); } @@ -463,7 +463,8 @@ public abstract class ProtocolServer { try { final int rs = socket.read(conn.readBuffer); key.interestOps(SelectionKey.OP_CONNECT); - if (rs <= 0) return; + //System.out.println(conn + "------readbuf:" + conn.readBuffer + "-------handler:" + conn.readHandler + "-------read: " + rs); + if(conn.readHandler == null) return; context.runAsync(() -> conn.completeRead(rs)); } catch (Throwable t) { context.runAsync(() -> conn.faileRead(t)); @@ -478,7 +479,8 @@ public abstract class ProtocolServer { int offset = conn.writeOffset; int length = conn.writeLength; for (;;) { - rs += socket.write(buffers, offset, length); + long sr = socket.write(buffers, offset, length); + if (sr > 0) rs += sr; boolean over = true; int end = offset + length; for (int i = offset; i < end; i++) { @@ -496,6 +498,7 @@ public abstract class ProtocolServer { } key.interestOps(SelectionKey.OP_CONNECT); final int rs0 = rs; + //System.out.println(conn + "------buffers:" + conn.writeBuffers + "---onebuf:" + conn.writeOneBuffer + "-------handler:" + conn.writeHandler + "-------write: " + rs); context.runAsync(() -> conn.completeWrite(rs0)); } catch (Throwable t) { context.runAsync(() -> conn.faileWrite(t));