Author: mturk
Date: Sun Oct 19 04:09:40 2008
New Revision: 705977

URL: http://svn.apache.org/viewvc?rev=705977&view=rev
Log:
EAGAIN is signaled when socket_timeout is set. When timeout occurs during read 
we break on Windows because there are no EAGAIN there. So break on posix as well

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_connect.c

Modified: tomcat/connectors/trunk/jk/native/common/jk_connect.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_connect.c?rev=705977&r1=705976&r2=705977&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_connect.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_connect.c Sun Oct 19 04:09:40 
2008
@@ -661,6 +661,7 @@
 {
     char dummy[512];
     int rc = 0;
+    int rd = 0;
     int save_errno;
     fd_set rs;
     struct timeval tv;
@@ -674,11 +675,16 @@
     }
 
     save_errno = errno;
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG, "About to shutdown socket %d", sd);
+
     /* Shut down the socket for write, which will send a FIN
      * to the peer.
      */
     if (shutdown(sd, SHUT_WR)) {
         rc = jk_close_socket(sd, l);
+        if (JK_IS_DEBUG_LEVEL(l))
+            jk_log(l, JK_LOG_DEBUG, "Failed sending SHUT_WR for socket %d", 
sd);
         errno = save_errno;
         JK_TRACE_EXIT(l);
         return rc;
@@ -707,6 +713,8 @@
 #else
                 rc = read(sd, &dummy[0], sizeof(dummy));
 #endif
+                if (rc > 0)
+                    rd += rc;
             } while (JK_IS_SOCKET_ERROR(rc) && (errno == EINTR || errno == 
EAGAIN));
 
             if (rc <= 0)
@@ -718,6 +726,9 @@
     } while (difftime(time(NULL), start) < MAX_SECS_TO_LINGER);
 
     rc = jk_close_socket(sd, l);
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG, "Shutdown socket %d and read %d lingering 
bytes",
+               sd, rd);
     errno = save_errno;
     JK_TRACE_EXIT(l);
     return rc;
@@ -804,7 +815,7 @@
 #else
             rd = read(sd, (char *)b + rdlen, len - rdlen);
 #endif
-        } while (JK_IS_SOCKET_ERROR(rd) && (errno == EINTR || errno == 
EAGAIN));
+        } while (JK_IS_SOCKET_ERROR(rd) && errno == EINTR);
 
         if (JK_IS_SOCKET_ERROR(rd)) {
             jk_shutdown_socket(sd, l);



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to