You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2007/12/12 12:03:48 UTC
svn commit: r603556 - in /tomcat/connectors/trunk/jk/native/common:
jk_ajp_common.c jk_connect.c jk_connect.h
Author: rjung
Date: Wed Dec 12 03:03:47 2007
New Revision: 603556
URL: http://svn.apache.org/viewvc?rev=603556&view=rev
Log:
Move ajp_is_input_event() to jk_connect and
rename to jk_is_input_event().
Modified:
tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
tomcat/connectors/trunk/jk/native/common/jk_connect.c
tomcat/connectors/trunk/jk/native/common/jk_connect.h
Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=603556&r1=603555&r2=603556&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Wed Dec 12 03:03:47 2007
@@ -749,46 +749,6 @@
}
/*
- * Wait input event on ajp_endpoint for timeout ms
- */
-static int ajp_is_input_event(ajp_endpoint_t * ae, int timeout, jk_logger_t *l)
-{
- fd_set rset;
- struct timeval tv;
- int rc;
-
- FD_ZERO(&rset);
- FD_SET(ae->sd, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
-
- do {
- rc = select((int)ae->sd + 1, &rset, NULL, NULL, &tv);
- } while (rc < 0 && errno == EINTR);
-
- ae->last_errno = 0;
- if (rc == 0) {
- /* Timeout. Set the errno to timeout */
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- errno = WSAETIMEDOUT - WSABASEERR;
-#else
- errno = ETIMEDOUT;
-#endif
- ae->last_errno = errno;
- return JK_FALSE;
- }
- else if (rc < 0) {
- ae->last_errno = errno;
- jk_log(l, JK_LOG_WARNING,
- "error during select (errno=%d)", ae->last_errno);
- return JK_FALSE;
- }
- else
- return JK_TRUE;
-}
-
-
-/*
* Handle the CPING/CPONG initial query
*/
static int ajp_handle_cping_cpong(ajp_endpoint_t * ae, int timeout, jk_logger_t *l)
@@ -823,8 +783,12 @@
/* wait for Pong reply for timeout milliseconds
*/
- if (ajp_is_input_event(ae, timeout, l) == JK_FALSE) {
+ if (jk_is_input_event(ae->sd, timeout, l) == JK_FALSE) {
+ ae->last_errno = errno;
jk_log(l, JK_LOG_INFO, "timeout in reply pong");
+ /* We can't trust this connection any more. */
+ jk_shutdown_socket(ae->sd, l);
+ ae->sd = JK_INVALID_SOCKET;
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -880,7 +844,7 @@
}
/* should we send a CPING to validate connection ? */
if (ae->worker->connect_timeout > 0) {
- rc = ajp_handle_cping_cpong (ae,
+ rc = ajp_handle_cping_cpong(ae,
ae->worker->connect_timeout, l);
JK_TRACE_EXIT(l);
return rc;
@@ -1660,12 +1624,16 @@
/* If we set a reply timeout, check if something is available */
if (p->worker->reply_timeout > 0) {
- if (ajp_is_input_event(p, p->worker->reply_timeout, l) ==
+ if (jk_is_input_event(p->sd, p->worker->reply_timeout, l) ==
JK_FALSE) {
+ p->last_errno = errno;
jk_log(l, JK_LOG_ERROR,
"(%s) Timeout with waiting reply from tomcat. "
"Tomcat is down, stopped or network problems (errno=%d)",
p->worker->name, p->last_errno);
+ /* We can't trust this connection any more. */
+ jk_shutdown_socket(p->sd, l);
+ p->sd = JK_INVALID_SOCKET;
if (headeratclient == JK_FALSE) {
if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCGETREQUEST)
op->recoverable = JK_FALSE;
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=603556&r1=603555&r2=603556&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_connect.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_connect.c Wed Dec 12 03:03:47 2007
@@ -789,6 +789,55 @@
return buf;
}
+/** Wait for input event on socket until timeout
+ * @param sd socket to use
+ * @param timeout wait timeout in milliseconds
+ * @param l logger
+ * @return JK_FALSE: Timeout expired without something to read
+ * JK_FALSE: Error during waiting
+ * JK_TRUE: success
+ */
+int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l)
+{
+ fd_set rset;
+ struct timeval tv;
+ int rc;
+ int save_errno;
+
+ JK_TRACE_ENTER(l);
+
+ FD_ZERO(&rset);
+ FD_SET(sd, &rset);
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout % 1000) * 1000;
+
+ do {
+ rc = select((int)sd + 1, &rset, NULL, NULL, &tv);
+ } while (rc < 0 && errno == EINTR);
+
+ errno = 0;
+ if (rc == 0) {
+ /* Timeout. Set the errno to timeout */
+#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
+ errno = WSAETIMEDOUT - WSABASEERR;
+#else
+ errno = ETIMEDOUT;
+#endif
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ else if (rc < 0) {
+ save_errno = errno;
+ jk_log(l, JK_LOG_WARNING,
+ "error during select on socket sd = %d (errno=%d)", sd, errno);
+ errno = save_errno;
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+}
+
/** Test if a socket is still connected
* @param sd socket to use
* @param l logger
Modified: tomcat/connectors/trunk/jk/native/common/jk_connect.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_connect.h?rev=603556&r1=603555&r2=603556&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_connect.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_connect.h Wed Dec 12 03:03:47 2007
@@ -53,6 +53,8 @@
char *jk_dump_hinfo(struct sockaddr_in *saddr, char *buf);
+int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l);
+
int jk_is_socket_connected(jk_sock_t sd, jk_logger_t *l);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org