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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org