You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/06/05 21:03:07 UTC
svn commit: r1490006 - /tomcat/native/trunk/native/src/network.c
Author: markt
Date: Wed Jun 5 19:03:07 2013
New Revision: 1490006
URL: http://svn.apache.org/r1490006
Log:
Make sockets usable 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/trunk/native/src/network.c
Modified: tomcat/native/trunk/native/src/network.c
URL: http://svn.apache.org/viewvc/tomcat/native/trunk/native/src/network.c?rev=1490006&r1=1490005&r2=1490006&view=diff
==============================================================================
--- tomcat/native/trunk/native/src/network.c (original)
+++ tomcat/native/trunk/native/src/network.c Wed Jun 5 19:03:07 2013
@@ -461,7 +461,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);
@@ -534,7 +534,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);
@@ -568,7 +568,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);
@@ -605,7 +605,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);
@@ -636,7 +636,7 @@ 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);
@@ -674,7 +674,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, sendv)(
for (i = 0; i < nvec; i++) {
(*e)->ReleaseByteArrayElements(e, ba[i], 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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org