Author: remy.maucherat(a)jboss.com
Date: 2008-03-04 12:35:40 -0500 (Tue, 04 Mar 2008)
New Revision: 466
Modified:
trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
Log:
- Jean-Fr?\195?\169d?\195?\169ric determined it would be best to stick to only using the
timeout value (set to 0) to
switch to non blocking.
- Also use sensible timeout values.
Modified: trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
===================================================================
--- trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 2008-03-04 15:39:25 UTC
(rev 465)
+++ trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 2008-03-04 17:35:40 UTC
(rev 466)
@@ -87,12 +87,12 @@
this.endpoint = endpoint;
request = new Request();
- inputBuffer = new InternalAprInputBuffer(request, headerBufferSize);
+ inputBuffer = new InternalAprInputBuffer(request, headerBufferSize, endpoint);
request.setInputBuffer(inputBuffer);
response = new Response();
response.setHook(this);
- outputBuffer = new InternalAprOutputBuffer(response, headerBufferSize);
+ outputBuffer = new InternalAprOutputBuffer(response, headerBufferSize,
endpoint);
response.setOutputBuffer(outputBuffer);
request.setResponse(response);
@@ -1272,15 +1272,13 @@
} else if (actionCode == ActionCode.ACTION_COMET_BEGIN) {
comet = true;
// Set socket to non blocking mode
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 1);
Socket.timeoutSet(socket, 0);
outputBuffer.setNonBlocking(true);
inputBuffer.setNonBlocking(true);
} else if (actionCode == ActionCode.ACTION_COMET_END) {
comet = false;
// End non blocking mode
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 0);
- Socket.timeoutSet(socket, endpoint.getSoTimeout());
+ Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
outputBuffer.setNonBlocking(false);
inputBuffer.setNonBlocking(false);
} else if (actionCode == ActionCode.ACTION_COMET_SUSPEND) {
Modified: trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
===================================================================
--- trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java 2008-03-04 15:39:25
UTC (rev 465)
+++ trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java 2008-03-04 17:35:40
UTC (rev 466)
@@ -28,6 +28,7 @@
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.MimeHeaders;
+import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.res.StringManager;
import org.apache.coyote.InputBuffer;
@@ -42,18 +43,16 @@
public class InternalAprInputBuffer implements InputBuffer {
- // -------------------------------------------------------------- Constants
-
-
// ----------------------------------------------------------- Constructors
/**
* Alternate constructor.
*/
- public InternalAprInputBuffer(Request request, int headerBufferSize) {
+ public InternalAprInputBuffer(Request request, int headerBufferSize, AprEndpoint
endpoint) {
this.request = request;
+ this.endpoint = endpoint;
headers = request.getMimeHeaders();
buf = new byte[headerBufferSize];
@@ -186,6 +185,12 @@
protected boolean available = false;
+ /**
+ * Apr endpoint.
+ */
+ protected AprEndpoint endpoint = null;
+
+
// ------------------------------------------------------------- Properties
@@ -799,11 +804,7 @@
} else {
// In this specific situation, perform the read again in blocking
mode (the user is not
// using available and simply wants to read all data)
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 0);
- Socket.timeoutSet(socket, 20000*1000);
- nRead = Socket.recvbb(socket, 0, buf.length - lastValid);
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 1);
- Socket.timeoutSet(socket, 0);
+ nRead = Socket.recvbbt(socket, 0, buf.length - lastValid,
endpoint.getSoTimeout() * 1000);
if (nRead > 0) {
bbuf.limit(nRead);
bbuf.get(buf, pos, nRead);
Modified: trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
===================================================================
--- trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java 2008-03-04 15:39:25
UTC (rev 465)
+++ trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java 2008-03-04 17:35:40
UTC (rev 466)
@@ -26,6 +26,7 @@
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.HttpMessages;
import org.apache.tomcat.util.http.MimeHeaders;
+import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.res.StringManager;
import org.apache.coyote.ActionCode;
@@ -48,19 +49,12 @@
/**
- * Default constructor.
- */
- public InternalAprOutputBuffer(Response response) {
- this(response, Constants.DEFAULT_HTTP_HEADER_BUFFER_SIZE);
- }
-
-
- /**
* Alternate constructor.
*/
- public InternalAprOutputBuffer(Response response, int headerBufferSize) {
+ public InternalAprOutputBuffer(Response response, int headerBufferSize, AprEndpoint
endpoint) {
this.response = response;
+ this.endpoint = endpoint;
headers = response.getMimeHeaders();
buf = new byte[headerBufferSize];
@@ -186,6 +180,12 @@
protected boolean nonBlocking = false;
+ /**
+ * Apr endpoint.
+ */
+ protected AprEndpoint endpoint = null;
+
+
// ------------------------------------------------------------- Properties
@@ -805,9 +805,7 @@
System.out.println("Leftovers present");
if (Http11AprProcessor.containerThread.get() == Boolean.TRUE) {
System.out.println("Send leftovers using blocking");
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 0);
- // Also use the usual timeout
- Socket.timeoutSet(socket, 20000*1000);
+ Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
// Send leftover bytes
res = Socket.send(socket, leftover.getBuffer(), leftover.getOffset(),
leftover.getEnd());
leftover.recycle();
@@ -815,7 +813,6 @@
if (res > 0) {
res = Socket.sendbb(socket, 0, bbuf.position());
}
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 1);
Socket.timeoutSet(socket, 0);
} else {
throw new IOException("Backlog");
@@ -843,10 +840,8 @@
if (response.getFlushLeftovers() &&
(Http11AprProcessor.containerThread.get() == Boolean.TRUE)) {
System.out.println("Blocking write of all data");
// Switch to blocking mode and write the data
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 0);
- Socket.timeoutSet(socket, 20000*1000);
+ Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
res = Socket.sendbb(socket, 0, bbuf.position());
- Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 1);
Socket.timeoutSet(socket, 0);
} else {
// Put any leftover bytes in the leftover byte chunk