Greetings,
Will see... :-)
N.

[EMAIL PROTECTED] wrote:
mturk       2005/02/19 01:13:35

Modified: jk/native/common jk_ajp_common.c jk_connect.c
Log:
Use alternative is_socket_connected implementation using
select with 1 microsecond timeout. It should be both faster and
usable on netware too.
Revision Changes Path
1.91 +7 -9 jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c
Index: jk_ajp_common.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -r1.90 -r1.91
--- jk_ajp_common.c 18 Feb 2005 08:27:21 -0000 1.90
+++ jk_ajp_common.c 19 Feb 2005 09:13:35 -0000 1.91
@@ -847,10 +847,9 @@
if (ae->worker->cache_timeout > 0 || ae->worker->recycle_timeout > 0)
ae->last_access = time(NULL);
if (ae->worker->socket_timeout > 0) {
- int rc = 0;
- if ((rc = jk_is_socket_connected(ae->sd, ae->worker->socket_timeout)) != 1) {
- jk_log(l, JK_LOG_INFO,
- "Socket is not connected any more (status=%d)", rc);
+ if (!jk_is_socket_connected(ae->sd, ae->worker->socket_timeout)) {
+ jk_log(l, JK_LOG_INFO,
+ "Socket is not connected any more (errno=%d)", errno);
jk_close_socket(ae->sd);
ae->sd = -1;
JK_TRACE_EXIT(l);
@@ -1161,10 +1160,9 @@
while ((ae->sd > 0)) {
err = 0;
if (ae->worker->socket_timeout) {
- int rc = 0;
- if ((rc = jk_is_socket_connected(ae->sd, ae->worker->socket_timeout)) != 1) {
- jk_log(l, JK_LOG_INFO,
- "Socket is not connected any more (status=%d)", rc);
+ if (!jk_is_socket_connected(ae->sd, ae->worker->socket_timeout)) {
+ jk_log(l, JK_LOG_INFO,
+ "Socket is not connected any more (errno=%d)", errno);
jk_close_socket(ae->sd);
ae->sd = -1;
err++;
1.43 +48 -2 jakarta-tomcat-connectors/jk/native/common/jk_connect.c
Index: jk_connect.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_connect.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- jk_connect.c 17 Feb 2005 08:26:42 -0000 1.42
+++ jk_connect.c 19 Feb 2005 09:13:35 -0000 1.43
@@ -194,18 +194,36 @@
sock_buf);
}
-#ifdef WIN32
if (timeout > 0) {
+#ifdef WIN32
timeout = timeout * 1000;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
(char *) &timeout, sizeof(int));
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,
(char *) &timeout, sizeof(int));
+#else
+ /* TODO: How to set the timeout for other platforms? */
+#endif
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"timeout %d set for socket=%d",
timeout, sock);
}
+#ifdef SO_NOSIGPIPE
+ /* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when
+ * sending data to a dead peer. Possibly also existing and in use on other BSD
+ * systems?
+ */
+ set = 1;
+ if (setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (const char *)&set,
+ sizeof(int))) {
+ JK_GET_SOCKET_ERRNO();
+ jk_log(l, JK_LOG_ERROR,
+ "failed setting SO_NOSIGPIPE with errno=%d", errno);
+ jk_close_socket(sock);
+ JK_TRACE_EXIT(l);
+ return -1;
+ }
#endif
/* Tries to connect to Tomcat (continues trying while error is EINTR) */
do {
@@ -405,6 +423,32 @@
return 0;
}
+#if 1
+int jk_is_socket_connected(int sd, int timeout)
+{
+ fd_set fd;
+ struct timeval tv;
+ + FD_ZERO(&fd);
+ FD_SET(sd, &fd);
+
+ /* Wait one microsecond */
+ tv.tv_sec = 0;
+ tv.tv_usec = 1;
+
+ /* If we get a timeout, then we are still connected */
+ if (select(1, &fd, NULL, NULL, &tv) == 0)
+ return 1;
+ else {
+#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
+ errno = WSAGetLastError() - WSABASEERR;
+#endif
+ return 0;
+ }
+}
+
+#else
+
#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
#define EWOULDBLOCK (WSAEWOULDBLOCK - WSABASEERR)
#endif
@@ -434,3 +478,5 @@
else
return rc;
}
+
+#endif


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


.



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



Reply via email to