From f953b344780d85e6f3bf869fe7c35a7b9950a5f7 Mon Sep 17 00:00:00 2001 From: fhanik Date: Mon, 8 Mar 2010 16:38:35 +0000 Subject: [PATCH] more work towards making the JIO connector ready for async git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@920392 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/http11/Http11Processor.java | 3 ++- java/org/apache/tomcat/util/net/JIoEndpoint.java | 11 ++++++++--- java/org/apache/tomcat/util/net/SocketWrapper.java | 8 +++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index e74d3f9e0..2d3ef330f 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -185,12 +185,13 @@ public class Http11Processor extends AbstractHttp11Processor implements ActionHo error = true; } - boolean keptAlive = false; + boolean keptAlive = socketWrapper.isKeptAlive(); while (started && !error && keepAlive) { // Parsing the request header try { + //TODO - calculate timeout based on length in queue (System.currentTimeMills() - wrapper.getLastAccess() is the time in queue) if (keptAlive) { if (keepAliveTimeout > 0) { socket.setSoTimeout(keepAliveTimeout); diff --git a/java/org/apache/tomcat/util/net/JIoEndpoint.java b/java/org/apache/tomcat/util/net/JIoEndpoint.java index c42c9b2f9..270dd39f7 100644 --- a/java/org/apache/tomcat/util/net/JIoEndpoint.java +++ b/java/org/apache/tomcat/util/net/JIoEndpoint.java @@ -187,10 +187,12 @@ public class JIoEndpoint extends AbstractEndpoint { public void run() { boolean close = false; // Process the request from this socket - if (!setSocketOptions(socket.getSocket())) { //this does a handshake and resets socket value + if ( (!socket.isKeptAlive()) && (!setSocketOptions(socket.getSocket())) ) { //this does a handshake and resets socket value close = true; - } else if (!handler.process(socket)) { - close = true; + } + + if ( (!close) ) { + close = !handler.process(socket); } if (close) { // Close socket @@ -203,7 +205,10 @@ public class JIoEndpoint extends AbstractEndpoint { // Ignore } } else { + socket.setKeptAlive(true); + socket.access(); //keepalive connection + //TODO - servlet3 check async status, we may just be in a hold pattern getExecutor().execute(new SocketProcessor(socket)); } // Finish up this request diff --git a/java/org/apache/tomcat/util/net/SocketWrapper.java b/java/org/apache/tomcat/util/net/SocketWrapper.java index 624701990..21b79ae60 100644 --- a/java/org/apache/tomcat/util/net/SocketWrapper.java +++ b/java/org/apache/tomcat/util/net/SocketWrapper.java @@ -21,13 +21,14 @@ public class SocketWrapper { protected volatile E socket; - protected long lastAccess = -1; - protected boolean currentAccess = false; + protected volatile long lastAccess = -1; + protected volatile boolean currentAccess = false; protected long timeout = -1; protected boolean error = false; protected long lastRegistered = 0; protected volatile int keepAliveLeft = 100; protected boolean async = false; + protected boolean keptAlive = false; public SocketWrapper(E socket) { reset(socket); @@ -55,5 +56,6 @@ public class SocketWrapper { public int getKeepAliveLeft() { return this.keepAliveLeft; } public void setKeepAliveLeft(int keepAliveLeft) { this.keepAliveLeft = keepAliveLeft;} public int decrementKeepAlive() { return (--keepAliveLeft);} - + public boolean isKeptAlive() {return keptAlive;} + public void setKeptAlive(boolean keptAlive) {this.keptAlive = keptAlive;} } -- 2.11.0