Author: markt Date: Wed Jun 5 18:51:58 2013 New Revision: 1490001 URL: http://svn.apache.org/r1490001 Log: Make sockets useable for non-blocking IO. Return bytes written if >0 and error code is EAGAIN rather than the error code so the clients know how many bytes were written.
Modified: tomcat/native/branches/1.1.x/native/src/network.c Modified: tomcat/native/branches/1.1.x/native/src/network.c URL: http://svn.apache.org/viewvc/tomcat/native/branches/1.1.x/native/src/network.c?rev=1490001&r1=1490000&r2=1490001&view=diff ============================================================================== --- tomcat/native/branches/1.1.x/native/src/network.c (original) +++ tomcat/native/branches/1.1.x/native/src/network.c Wed Jun 5 18:51:58 2013 @@ -459,7 +459,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, send)(T ss = (*s->net->send)(s->opaque, (const char *)sb, &nbytes); free(sb); } - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && nbytes > 0)) return (jint)nbytes; else { TCN_ERROR_WRAP(ss); @@ -532,7 +532,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendb)( sent += wr; } - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && sent > 0)) return (jint)sent; else { TCN_ERROR_WRAP(ss); @@ -566,7 +566,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendib) ss = (*s->net->send)(s->opaque, bytes + offset, &nbytes); - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && nbytes > 0)) return (jint)nbytes; else { TCN_ERROR_WRAP(ss); @@ -603,7 +603,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendbb) break; sent += wr; } - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && sent > 0)) return (jint)sent; else { TCN_ERROR_WRAP(ss); @@ -634,11 +634,11 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendibb ss = (*s->net->send)(s->opaque, s->jsbbuff + offset, &nbytes); - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && nbytes > 0)) return (jint)nbytes; else { TCN_ERROR_WRAP(ss); - return -(jint)nbytes; + return -(jint)ss; } } @@ -672,7 +672,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendv)( for (i = 0; i < nvec; i++) { (*e)->ReleaseByteArrayElements(e, ba[i], (jbyte*)vec[i].iov_base, JNI_ABORT); } - if (ss == APR_SUCCESS) + if (ss == APR_SUCCESS || ((APR_STATUS_IS_EAGAIN(ss) || ss == TCN_EAGAIN) && written > 0)) return (jint)written; else { TCN_ERROR_WRAP(ss); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org