Author: remm
Date: Fri Sep 22 03:04:40 2006
New Revision: 448883
URL: http://svn.apache.org/viewvc?view=rev&rev=448883
Log:
- Pass along a status code when there's an error. This allows sending the
appropriate event to the servlet, and far
more flexible handling (for example, for timeouts, where the servlet gets to
decide if the connection is done - or not).
Added:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java
(with props)
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/Adapter.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
Fri Sep 22 03:04:40 2006
@@ -34,6 +34,7 @@
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.Cookies;
import org.apache.tomcat.util.http.ServerCookie;
+import org.apache.tomcat.util.net.SocketStatus;
/**
@@ -104,19 +105,34 @@
* @return false to indicate an error, expected or not
*/
public boolean event(org.apache.coyote.Request req,
- org.apache.coyote.Response res, boolean error) {
+ org.apache.coyote.Response res, SocketStatus status) {
Request request = (Request) req.getNote(ADAPTER_NOTES);
Response response = (Response) res.getNote(ADAPTER_NOTES);
if (request.getWrapper() != null) {
+ boolean error = false;
try {
- if (error) {
-
request.getEvent().setEventType(CometEvent.EventType.ERROR);
- } else {
+ if (status == SocketStatus.OPEN) {
request.getEvent().setEventType(CometEvent.EventType.READ);
+ request.getEvent().setEventSubType(null);
+ } else if (status == SocketStatus.DISCONNECT) {
+
request.getEvent().setEventType(CometEvent.EventType.ERROR);
+
request.getEvent().setEventSubType(CometEvent.EventSubType.CLIENT_DISCONNECT);
+ error = true;
+ } else if (status == SocketStatus.ERROR) {
+
request.getEvent().setEventType(CometEvent.EventType.ERROR);
+
request.getEvent().setEventSubType(CometEvent.EventSubType.IOEXCEPTION);
+ error = true;
+ } else if (status == SocketStatus.STOP) {
+ request.getEvent().setEventType(CometEvent.EventType.END);
+
request.getEvent().setEventSubType(CometEvent.EventSubType.SERVER_SHUTDOWN);
+ } else if (status == SocketStatus.TIMEOUT) {
+
request.getEvent().setEventType(CometEvent.EventType.ERROR);
+
request.getEvent().setEventSubType(CometEvent.EventSubType.TIMEOUT);
}
+
// Calling the container
connector.getContainer().getPipeline().getFirst().event(request, response,
request.getEvent());
@@ -140,8 +156,10 @@
response.recycle();
}
}
+
+ } else {
+ return false;
}
- return true;
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/Adapter.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/Adapter.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/Adapter.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/Adapter.java Fri Sep 22
03:04:40 2006
@@ -16,6 +16,8 @@
package org.apache.coyote;
+import org.apache.tomcat.util.net.SocketStatus;
+
/**
* Adapter. This represents the entry point in a coyote-based servlet
container.
@@ -26,7 +28,6 @@
*/
public interface Adapter {
-
/**
* Call the service method, and notify all listeners
*
@@ -45,7 +46,7 @@
public void service(Request req, Response res)
throws Exception;
- public boolean event(Request req, Response res, boolean error)
+ public boolean event(Request req, Response res, SocketStatus status)
throws Exception;
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Fri Sep
22 03:04:40 2006
@@ -34,8 +34,8 @@
import org.apache.coyote.RequestInfo;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AprEndpoint;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.AprEndpoint.Handler;
-import org.apache.tomcat.util.net.AprEndpoint.Handler.SocketState;
import org.apache.tomcat.util.res.StringManager;
@@ -431,7 +431,7 @@
}
// FIXME: Support for this could be added in AJP as well
- public SocketState event(long socket, boolean error) {
+ public SocketState event(long socket, SocketStatus status) {
return SocketState.CLOSED;
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
Fri Sep 22 03:04:40 2006
@@ -52,6 +52,7 @@
import org.apache.tomcat.util.http.FastHttpDateFormat;
import org.apache.tomcat.util.http.MimeHeaders;
import org.apache.tomcat.util.net.AprEndpoint;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.AprEndpoint.Handler.SocketState;
import org.apache.tomcat.util.res.StringManager;
@@ -736,14 +737,14 @@
*
* @throws IOException error during an I/O operation
*/
- public SocketState event(boolean error)
+ public SocketState event(SocketStatus status)
throws IOException {
RequestInfo rp = request.getRequestProcessor();
try {
rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
- error = !adapter.event(request, response, error);
+ error = !adapter.event(request, response, status);
} catch (InterruptedIOException e) {
error = true;
} catch (Throwable t) {
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
Fri Sep 22 03:04:40 2006
@@ -35,6 +35,7 @@
import org.apache.coyote.RequestInfo;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AprEndpoint;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.AprEndpoint.Handler;
import org.apache.tomcat.util.res.StringManager;
@@ -615,15 +616,14 @@
this.proto = proto;
}
- public SocketState event(long socket, boolean error) {
+ public SocketState event(long socket, SocketStatus status) {
Http11AprProcessor result = connections.get(socket);
SocketState state = SocketState.CLOSED;
if (result != null) {
- boolean recycle = error;
// Call the appropriate event
try {
- state = result.event(error);
+ state = result.event(status);
} catch (java.net.SocketException e) {
// SocketExceptions are normal
Http11AprProtocol.log.debug
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
Fri Sep 22 03:04:40 2006
@@ -48,6 +48,7 @@
import org.apache.tomcat.util.net.NioChannel;
import org.apache.tomcat.util.net.NioEndpoint;
import org.apache.tomcat.util.net.SSLSupport;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.NioEndpoint.Handler.SocketState;
import org.apache.tomcat.util.res.StringManager;
@@ -739,14 +740,14 @@
*
* @throws IOException error during an I/O operation
*/
- public SocketState event(boolean error)
+ public SocketState event(SocketStatus status)
throws IOException {
RequestInfo rp = request.getRequestProcessor();
try {
rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
- error = !adapter.event(request, response, error);
+ error = !adapter.event(request, response, status);
SelectionKey key =
socket.getIOChannel().keyFor(socket.getPoller().getSelector());
if ( key != null ) {
NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)
key.attachment();
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
Fri Sep 22 03:04:40 2006
@@ -39,6 +39,7 @@
import org.apache.tomcat.util.net.NioChannel;
import org.apache.tomcat.util.net.SSLImplementation;
import org.apache.tomcat.util.net.SecureNioChannel;
+import org.apache.tomcat.util.net.SocketStatus;
/**
@@ -554,15 +555,14 @@
this.proto = proto;
}
- public SocketState event(NioChannel socket, boolean error) {
+ public SocketState event(NioChannel socket, SocketStatus status) {
Http11NioProcessor result = connections.get(socket);
SocketState state = SocketState.CLOSED;
if (result != null) {
- boolean recycle = error;
// Call the appropriate event
try {
- state = result.event(error);
+ state = result.event(status);
} catch (java.net.SocketException e) {
// SocketExceptions are normal
Http11NioProtocol.log.debug
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri
Sep 22 03:04:40 2006
@@ -1052,12 +1052,12 @@
/**
* Process given socket for an event.
*/
- protected boolean processSocket(long socket, boolean error) {
+ protected boolean processSocket(long socket, SocketStatus status) {
try {
if (executor == null) {
- getWorkerThread().assign(socket, error);
+ getWorkerThread().assign(socket, status);
} else {
- executor.execute(new SocketEventProcessor(socket, error));
+ executor.execute(new SocketEventProcessor(socket, status));
}
} catch (Throwable t) {
// This means we got an OOM or similar creating a thread, or that
@@ -1186,7 +1186,7 @@
// Close all sockets in the add queue
for (int i = 0; i < addCount; i++) {
if (comet) {
- processSocket(addS[i], true);
+ processSocket(addS[i], SocketStatus.STOP);
} else {
Socket.destroy(addS[i]);
}
@@ -1196,7 +1196,7 @@
if (rv > 0) {
for (int n = 0; n < rv; n++) {
if (comet) {
- processSocket(desc[n*2+1], true);
+ processSocket(desc[n*2+1], SocketStatus.STOP);
} else {
Socket.destroy(desc[n*2+1]);
}
@@ -1222,7 +1222,7 @@
if (addCount >= addS.length) {
// Can't do anything: close the socket right away
if (comet) {
- processSocket(socket, true);
+ processSocket(socket, SocketStatus.ERROR);
} else {
Socket.destroy(socket);
}
@@ -1276,7 +1276,7 @@
} else {
// Can't do anything: close the socket
right away
if (comet) {
- processSocket(addS[i], true);
+ processSocket(addS[i],
SocketStatus.ERROR);
} else {
Socket.destroy(addS[i]);
}
@@ -1295,11 +1295,11 @@
// Check for failed sockets and hand this socket
off to a worker
if (((desc[n*2] & Poll.APR_POLLHUP) ==
Poll.APR_POLLHUP)
|| ((desc[n*2] & Poll.APR_POLLERR) ==
Poll.APR_POLLERR)
- || (comet && (!processSocket(desc[n*2+1],
false)))
+ || (comet && (!processSocket(desc[n*2+1],
SocketStatus.OPEN)))
|| (!comet &&
(!processSocket(desc[n*2+1])))) {
// Close socket and clear pool
if (comet) {
- processSocket(desc[n*2+1], true);
+ processSocket(desc[n*2+1],
SocketStatus.DISCONNECT);
} else {
Socket.destroy(desc[n*2+1]);
}
@@ -1330,7 +1330,7 @@
for (int n = 0; n < rv; n++) {
// Close socket and clear pool
if (comet) {
- processSocket(desc[n], true);
+ processSocket(desc[n],
SocketStatus.TIMEOUT);
} else {
Socket.destroy(desc[n]);
}
@@ -1364,8 +1364,7 @@
protected Thread thread = null;
protected boolean available = false;
protected long socket = 0;
- protected boolean event = false;
- protected boolean error = false;
+ protected SocketStatus status = null;
protected boolean options = false;
@@ -1390,8 +1389,7 @@
// Store the newly available Socket and notify our thread
this.socket = socket;
- event = false;
- error = false;
+ status = null;
options = true;
available = true;
notifyAll();
@@ -1420,8 +1418,7 @@
// Store the newly available Socket and notify our thread
this.socket = socket;
- event = false;
- error = false;
+ status = null;
options = false;
available = true;
notifyAll();
@@ -1429,7 +1426,7 @@
}
- protected synchronized void assign(long socket, boolean error) {
+ protected synchronized void assign(long socket, SocketStatus status) {
// Wait for the Processor to get the previous Socket
while (available) {
@@ -1441,8 +1438,7 @@
// Store the newly available Socket and notify our thread
this.socket = socket;
- event = true;
- this.error = error;
+ this.status = status;
options = false;
available = true;
notifyAll();
@@ -1489,11 +1485,11 @@
continue;
// Process the request from this socket
- if ((event) && (handler.event(socket, error) ==
Handler.SocketState.CLOSED)) {
+ if ((status != null) && (handler.event(socket, status) ==
Handler.SocketState.CLOSED)) {
// Close socket and pool
Socket.destroy(socket);
socket = 0;
- } else if ((!event) && ((options && !setSocketOptions(socket))
+ } else if ((status == null) && ((options &&
!setSocketOptions(socket))
|| handler.process(socket) ==
Handler.SocketState.CLOSED)) {
// Close socket and pool
Socket.destroy(socket);
@@ -1824,7 +1820,7 @@
OPEN, CLOSED, LONG
}
public SocketState process(long socket);
- public SocketState event(long socket, boolean error);
+ public SocketState event(long socket, SocketStatus status);
}
@@ -1954,17 +1950,17 @@
protected class SocketEventProcessor implements Runnable {
protected long socket = 0;
- protected boolean error = false;
+ protected SocketStatus status = null;
- public SocketEventProcessor(long socket, boolean error) {
+ public SocketEventProcessor(long socket, SocketStatus status) {
this.socket = socket;
- this.error = error;
+ this.status = status;
}
public void run() {
// Process the request from this socket
- if (handler.event(socket, error) == Handler.SocketState.CLOSED) {
+ if (handler.event(socket, status) == Handler.SocketState.CLOSED) {
// Close socket and pool
Socket.destroy(socket);
socket = 0;
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=448883&r1=448882&r2=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Fri
Sep 22 03:04:40 2006
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.CancelledKeyException;
import java.nio.channels.SelectionKey;
@@ -28,9 +29,12 @@
import java.nio.channels.SocketChannel;
import java.security.KeyStore;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicLong;
+
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
@@ -40,13 +44,6 @@
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.util.net.SecureNioChannel.ApplicationBufferHandler;
import org.apache.tomcat.util.res.StringManager;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.net.Socket;
-import java.util.StringTokenizer;
/**
* NIO tailored thread pool, providing the following services:
@@ -855,12 +852,12 @@
/**
* Process given socket for an event.
*/
- protected boolean processSocket(NioChannel socket, boolean error) {
+ protected boolean processSocket(NioChannel socket, SocketStatus status) {
try {
if (executor == null) {
- getWorkerThread().assign(socket, error);
+ getWorkerThread().assign(socket, status);
} else {
- executor.execute(new SocketEventProcessor(socket, error));
+ executor.execute(new SocketEventProcessor(socket, status));
}
} catch (Throwable t) {
// This means we got an OOM or similar creating a thread, or that
@@ -1041,11 +1038,14 @@
addEvent(r);
}
- public void cancelledKey(SelectionKey key) {
+ public void cancelledKey(SelectionKey key, SocketStatus status) {
try {
KeyAttachment ka = (KeyAttachment) key.attachment();
if ( key.isValid() ) key.cancel();
- if (ka != null && ka.getComet()) processSocket(
ka.getChannel(), true);
+ if (ka != null && ka.getComet()) processSocket(
ka.getChannel(), status);
+ // FIXME: closing in all these cases is a bit mean. IMO, it
should leave it
+ // to the worker (or executor) depending on what the request
processor
+ // returns
if ( key.channel().isOpen() ) key.channel().close();
key.attach(null);
} catch (Throwable e) {
@@ -1116,7 +1116,8 @@
attachment.setWakeUp(false);
synchronized (attachment.getMutex())
{attachment.getMutex().notifyAll();}
} else if ( attachment.getComet() ) {
- if (!processSocket(channel,false))
processSocket(channel,true);
+ if (!processSocket(channel,
SocketStatus.OPEN))
+ processSocket(channel,
SocketStatus.DISCONNECT);
} else {
boolean close = (!processSocket(channel));
if ( close ) {
@@ -1127,10 +1128,10 @@
}
} else {
//invalid key
- cancelledKey(sk);
+ cancelledKey(sk, SocketStatus.ERROR);
}
} catch ( CancelledKeyException ckx ) {
- cancelledKey(sk);
+ cancelledKey(sk, SocketStatus.ERROR);
} catch (Throwable t) {
log.error("",t);
}
@@ -1156,23 +1157,23 @@
try {
KeyAttachment ka = (KeyAttachment) key.attachment();
if ( ka == null ) {
- cancelledKey(key); //we don't support any keys without
attachments
+ cancelledKey(key, SocketStatus.ERROR); //we don't
support any keys without attachments
} else if ( ka.getError() ) {
- cancelledKey(key);
+ cancelledKey(key, SocketStatus.DISCONNECT);
}else if ((ka.interestOps()&SelectionKey.OP_READ) ==
SelectionKey.OP_READ) {
//only timeout sockets that we are waiting for a read
from
long delta = now - ka.getLastAccess();
long timeout = (ka.getTimeout()==-1)?((long)
soTimeout):(ka.getTimeout());
boolean isTimedout = delta > timeout;
if (isTimedout) {
- cancelledKey(key);
+ cancelledKey(key, SocketStatus.TIMEOUT);
} else {
long nextTime = now+(timeout-delta);
nextExpiration = (nextTime <
nextExpiration)?nextTime:nextExpiration;
}
}//end if
}catch ( CancelledKeyException ckx ) {
- cancelledKey(key);
+ cancelledKey(key, SocketStatus.ERROR);
}
}//for
}
@@ -1230,8 +1231,7 @@
protected Thread thread = null;
protected boolean available = false;
protected Object socket = null;
- protected boolean event = false;
- protected boolean error = false;
+ protected SocketStatus status = null;
/**
@@ -1254,15 +1254,14 @@
}
// Store the newly available Socket and notify our thread
this.socket = socket;
- event = false;
- error = false;
+ status = null;
available = true;
notifyAll();
}
- protected synchronized void assign(Object socket, boolean error) {
+ protected synchronized void assign(Object socket, SocketStatus status)
{
// Wait for the Processor to get the previous Socket
while (available) {
@@ -1274,8 +1273,7 @@
// Store the newly available Socket and notify our thread
this.socket = socket;
- event = true;
- this.error = error;
+ this.status = status;
available = true;
notifyAll();
}
@@ -1348,7 +1346,7 @@
}
if ( handshake == 0 ) {
// Process the request from this socket
- if ((event) && (handler.event(socket, error) ==
Handler.SocketState.CLOSED)) {
+ if ((status != null) && (handler.event(socket,
status) == Handler.SocketState.CLOSED)) {
// Close socket and pool
try {
@@ -1358,7 +1356,7 @@
}catch ( Exception x ) {
log.error("",x);
}
- } else if ((!event) && (handler.process(socket) ==
Handler.SocketState.CLOSED)) {
+ } else if ((status == null) &&
(handler.process(socket) == Handler.SocketState.CLOSED)) {
// Close socket and pool
try {
@@ -1454,7 +1452,7 @@
OPEN, CLOSED, LONG
}
public SocketState process(NioChannel socket);
- public SocketState event(NioChannel socket, boolean error);
+ public SocketState event(NioChannel socket, SocketStatus status);
}
@@ -1584,17 +1582,17 @@
protected class SocketEventProcessor implements Runnable {
protected NioChannel socket = null;
- protected boolean error = false;
+ protected SocketStatus status = null;
- public SocketEventProcessor(NioChannel socket, boolean error) {
+ public SocketEventProcessor(NioChannel socket, SocketStatus status) {
this.socket = socket;
- this.error = error;
+ this.status = status;
}
public void run() {
// Process the request from this socket
- if (handler.event(socket, error) == Handler.SocketState.CLOSED) {
+ if (handler.event(socket, status) == Handler.SocketState.CLOSED) {
// Close socket and pool
try {
try {socket.close();}catch (Exception ignore){}
Added: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java?view=auto&rev=448883
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java
(added)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java Fri
Sep 22 03:04:40 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomcat.util.net;
+
+/**
+ * Someone, please change the enum name.
+ *
+ * @author remm
+ */
+public enum SocketStatus {
+ OPEN, STOP, TIMEOUT, DISCONNECT, ERROR
+}
Propchange:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketStatus.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]