mturk 2005/04/23 10:05:31 Modified: util/java/org/apache/tomcat/util/net AprEndpoint.java Log: Fix partial results from sendfile. Do not break the loop while the sendfile will not block. Revision Changes Path 1.16 +18 -17 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java Index: AprEndpoint.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- AprEndpoint.java 23 Apr 2005 15:57:24 -0000 1.15 +++ AprEndpoint.java 23 Apr 2005 17:05:31 -0000 1.16 @@ -1063,25 +1063,26 @@ data.pos = data.start; // Set the socket to nonblocking mode Socket.optSet(socket, Socket.APR_SO_NONBLOCK, 1); - int nw = Socket.sendfile(socket, data.fd, null, null, - data.pos, (int)data.end, 0); - if (nw < 0) { - if (!Status.APR_STATUS_IS_EAGAIN(-nw)) { - Poll.destroy(data.pool); - return; - } - } - else { - data.pos = data.pos + nw; - if (data.pos >= data.end) { - // Entire file has been send - Poll.destroy(data.pool); - return; + while (true) { + int nw = Socket.sendfile(socket, data.fd, null, null, + data.pos, (int)data.end, 0); + if (nw < 0) { + if (!Status.APR_STATUS_IS_EAGAIN(-nw)) { + Poll.destroy(data.pool); + return; + } + else { + // Break the loop and add the socket to poller. + break; + } } else { - //FIXME: Ether EAGAIN of full data should be returned - Poll.destroy(data.pool); - return; + data.pos = data.pos + nw; + if (data.pos >= data.end) { + // Entire file has been send + Poll.destroy(data.pool); + return; + } } } } catch (Error e) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]