You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jean-frederic clere <jf...@fujitsu-siemens.com> on 2001/10/08 17:48:27 UTC

Re: ajp13 and tomcat 4.0 - Must set connectionTimeout to 0

Hi,

Another possible way would be to apply the following patch:
+++
Index: java/org/apache/ajp/Ajp13.java
===================================================================
RCS file:
/home/cvs/mirror/jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13.java,v
retrieving revision 1.16
diff -u -r1.16 Ajp13.java
--- java/org/apache/ajp/Ajp13.java      2001/10/01 20:50:39     1.16
+++ java/org/apache/ajp/Ajp13.java      2001/10/08 12:56:38
@@ -214,6 +214,8 @@
 
     OutputStream out;
     InputStream in;
+    Socket socket;
+    int connectionTimeout;
 
     // Buffer used of output body and headers
     Ajp13Packet outBuf = new Ajp13Packet( MAX_PACKET_SIZE );
@@ -265,6 +267,8 @@
        socket.setSoLinger( true, 100);
        out = socket.getOutputStream();
        in  = socket.getInputStream();
+        connectionTimeout = socket.getSoTimeout();
+        this.socket = socket;
        pos = 0;
     }
 
@@ -286,6 +290,7 @@
 
        // XXX The return values are awful.
 
+        socket.setSoTimeout(0);
        int err = receive(hBuf);
        if(err < 0) {
            return 500;
@@ -864,6 +869,8 @@
             if (got < 0)
                 return JK_AJP13_COMM_BROKEN;
 
+            if (socket.getSoTimeout()!=connectionTimeout)
+                socket.setSoTimeout(connectionTimeout);
             pos += got;
         }
         return pos;
+++
That way we are sure we are not blocked when the read is hanging in the midle of
a message.

Cheers

Jean-frederic

GOMEZ Henri wrote:
> 
> Hi to all,
> 
> It seems that Ajp13Connector use a timeout set in Tomcat 4.0,
> notimeout in TC 3.2/3.3 and since ajp13 connection ARE persistant
> we have Read timed out error :
> 
> Here is the kind of problems you'll see (thanks Xavier)
> A solution will be set connectionTimeout to 0 in server.xml :
> 
>     <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
>                port="8009" minProcessors="5" maxProcessors="75"
>                acceptCount="10" debug="0" connectionTimeout="0" />
> 
> 001-10-08 09:57:04 Ajp13Connector[8009] Opening server socket on all host IP
> addresses
> 2001-10-08 09:57:04 Ajp13Connector[8009] Starting background thread
> 2001-10-08 09:57:04 Ajp13Processor[8009][0] Starting background thread
> 2001-10-08 09:57:04 Ajp13Processor[8009][1] Starting background thread
> 2001-10-08 09:57:04 Ajp13Processor[8009][2] Starting background thread
> 2001-10-08 09:57:04 Ajp13Processor[8009][3] Starting background thread
> 2001-10-08 09:57:04 Ajp13Processor[8009][4] Starting background thread
> 2001-10-08 09:58:45 Ajp13Processor[8009][4] process:
> ajp13.receiveNextRequest
> java.io.InterruptedIOException: Read timed out
>         at java.net.SocketInputStream.socketRead(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:86)
>         at org.apache.ajp.Ajp13.readN(Ajp13.java:849)
>         at org.apache.ajp.Ajp13.receive(Ajp13.java:889)
>         at org.apache.ajp.Ajp13.receiveNextRequest(Ajp13.java:285)
>         at
> org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:339)
>         at
> org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:424)
>         at java.lang.Thread.run(Thread.java:484)