Author: markt
Date: Tue Feb 28 21:23:04 2012
New Revision: 1294840
URL: http://svn.apache.org/viewvc?rev=1294840&view=rev
Log:
Add non-blocking support for APR.
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeAprProcessor.java
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties?rev=1294840&r1=1294839&r2=1294840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
Tue Feb 28 21:23:04 2012
@@ -13,4 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+apr.error=Unexpected error [{0}] reading data from the APR/native socket.
+
nio.eof.error=Unexpected EOF read on the socket
+
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeAprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeAprProcessor.java?rev=1294840&r1=1294839&r2=1294840&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeAprProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeAprProcessor.java
Tue Feb 28 21:23:04 2012
@@ -19,6 +19,7 @@ package org.apache.coyote.http11.upgrade
import java.io.IOException;
import org.apache.tomcat.jni.Socket;
+import org.apache.tomcat.jni.Status;
import org.apache.tomcat.util.net.SocketWrapper;
public class UpgradeAprProcessor extends UpgradeProcessor<Long> {
@@ -73,7 +74,23 @@ public class UpgradeAprProcessor extends
@Override
public int read(boolean block, byte[] bytes, int off, int len)
throws IOException {
- // TODO support non-blocking reads
- return Socket.recv(socket, bytes, off, len);
+ if (!block) {
+ Socket.optSet(socket, Socket.APR_SO_NONBLOCK, -1);
+ }
+ try {
+ int result = Socket.recv(socket, bytes, off, len);
+ if (result > 0) {
+ return result;
+ } else if (-result == Status.EAGAIN) {
+ return 0;
+ } else {
+ throw new IOException(sm.getString("apr.error",
+ Integer.valueOf(-result)));
+ }
+ } finally {
+ if (!block) {
+ Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 0);
+ }
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]