Author: fhanik Date: Thu Jul 13 12:51:56 2006 New Revision: 421694 URL: http://svn.apache.org/viewvc?rev=421694&view=rev Log: Set a per connection timeout
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometProcessor.java?rev=421694&r1=421693&r2=421694&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometProcessor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometProcessor.java Thu Jul 13 12:51:56 2006 @@ -117,7 +117,7 @@ * This method should not be called asynchronously, as that will have no effect. * @param request The HTTP servlet request instance * @param response The HTTP servlet response instance - * @param timeout The timeout in milliseconds for this connection + * @param timeout The timeout in milliseconds for this connection, must be a positive value, larger than 0 * @throws IOException An IOException may be thrown to indicate an IO error, * or that the EOF has been reached on the connection * @throws ServletException An exception has occurred, as specified by the root 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?rev=421694&r1=421693&r2=421694&view=diff ============================================================================== --- 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 Thu Jul 13 12:51:56 2006 @@ -743,7 +743,11 @@ SelectionKey key = socket.keyFor(endpoint.getPoller().getSelector()); if ( key != null ) { NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment(); - if ( attach!=null ) attach.setComet(comet); + if ( attach!=null ) { + attach.setComet(comet); + Integer comettimeout = (Integer)request.getAttribute("org.apache.tomcat.comet.timeout"); + if ( comettimeout != null ) attach.setTimeout(comettimeout.longValue()); + } } } catch (InterruptedIOException e) { @@ -884,7 +888,11 @@ SelectionKey key = socket.keyFor(endpoint.getPoller().getSelector()); if (key != null) { NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment(); - if (attach != null) attach.setComet(comet); + if (attach != null) { + attach.setComet(comet); + Integer comettimeout = (Integer) request.getAttribute("org.apache.tomcat.comet.timeout"); + if (comettimeout != null) attach.setTimeout(comettimeout.longValue()); + } } } catch (InterruptedIOException e) { error = true; @@ -1397,6 +1405,8 @@ // Advertise comet support through a request attribute request.setAttribute("org.apache.tomcat.comet.support", Boolean.TRUE); + // Advertise comet timeout support + request.setAttribute("org.apache.tomcat.comet.timeout.support", Boolean.TRUE); } 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?rev=421694&r1=421693&r2=421694&view=diff ============================================================================== --- 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 Thu Jul 13 12:51:56 2006 @@ -1158,16 +1158,17 @@ }//while //timeout - Set keys = selector.keys(); + Set<SelectionKey> keys = selector.keys(); long now = System.currentTimeMillis(); - for (Iterator iter = keys.iterator(); iter.hasNext(); ) { - SelectionKey key = (SelectionKey) iter.next(); + for (Iterator<SelectionKey> iter = keys.iterator(); iter.hasNext(); ) { + SelectionKey key = iter.next(); try { if (key.interestOps() == SelectionKey.OP_READ) { //only timeout sockets that we are waiting for a read from KeyAttachment ka = (KeyAttachment) key.attachment(); long delta = now - ka.getLastAccess(); - if (delta > (long) soTimeout) { + boolean isTimedout = (ka.getTimeout()==-1)?(delta > (long) soTimeout):(delta>ka.getTimeout()); + if (isTimedout) { cancelledKey(key); } } @@ -1197,11 +1198,14 @@ public boolean getWakeUp() { return wakeUp; } public void setWakeUp(boolean wakeUp) { this.wakeUp = wakeUp; } public Object getMutex() {return mutex;} + public void setTimeout(long timeout) {this.timeout = timeout;} + public long getTimeout() {return this.timeout;} protected Object mutex = new Object(); protected boolean wakeUp = false; protected long lastAccess = System.currentTimeMillis(); protected boolean currentAccess = false; protected boolean comet = false; + protected long timeout = -1; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]