Author: mturk Date: Mon Dec 21 08:31:40 2009 New Revision: 892725 URL: http://svn.apache.org/viewvc?rev=892725&view=rev Log: Add SOCK_CLOEXEC|FD_CLOEXEC when creting sockets. This should fix the #48169
Modified: tomcat/jk/trunk/native/common/jk_connect.c tomcat/jk/trunk/native/configure.in Modified: tomcat/jk/trunk/native/common/jk_connect.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_connect.c?rev=892725&r1=892724&r2=892725&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_connect.c (original) +++ tomcat/jk/trunk/native/common/jk_connect.c Mon Dec 21 08:31:40 2009 @@ -427,6 +427,7 @@ jk_sock_t sd; int set = 1; int ret = 0; + int flags = 0; #ifdef SO_LINGER struct linger li; #endif @@ -434,7 +435,10 @@ JK_TRACE_ENTER(l); errno = 0; - sd = socket(AF_INET, SOCK_STREAM, 0); +#if defined(SOCK_CLOEXEC) && defined(USE_SOCK_CLOEXEC) + flags |= SOCK_CLOEXEC; +#endif + sd = socket(AF_INET, SOCK_STREAM | flags, 0); if (!IS_VALID_SOCKET(sd)) { JK_GET_SOCKET_ERRNO(); jk_log(l, JK_LOG_ERROR, @@ -442,6 +446,26 @@ JK_TRACE_EXIT(l); return JK_INVALID_SOCKET; } +#if defined(FD_CLOEXEC) && !defined(USE_SOCK_CLOEXEC) + if ((flags = fcntl(sd, F_GETFD)) == -1) { + JK_GET_SOCKET_ERRNO(); + jk_log(l, JK_LOG_ERROR, + "fcntl() failed (errno=%d)", errno); + jk_close_socket(sd, l); + JK_TRACE_EXIT(l); + return JK_INVALID_SOCKET; + } + flags |= FD_CLOEXEC; + if (fcntl(sd, F_SETFD, flags) == -1) { + JK_GET_SOCKET_ERRNO(); + jk_log(l, JK_LOG_ERROR, + "fcntl() failed (errno=%d)", errno); + jk_close_socket(sd, l); + JK_TRACE_EXIT(l); + return JK_INVALID_SOCKET; + } +#endif + /* Disable Nagle algorithm */ if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (SET_TYPE)&set, sizeof(set))) { Modified: tomcat/jk/trunk/native/configure.in URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/configure.in?rev=892725&r1=892724&r2=892725&view=diff ============================================================================== --- tomcat/jk/trunk/native/configure.in (original) +++ tomcat/jk/trunk/native/configure.in Mon Dec 21 08:31:40 2009 @@ -319,6 +319,35 @@ JK_CHECK_SETSOCKOPT(SO_RCVTIMEO) JK_CHECK_SETSOCKOPT(SO_SNDTIMEO) +AC_DEFUN([JK_CHECK_SOCKOPT], [ +AC_MSG_CHECKING(whether to use $1 with socket()) +AC_TRY_RUN([ +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/time.h> + +int main(void) +{ + int s; + +#ifndef $1 + exit(3); +#else + if ((s = socket(AF_INET, SOCK_STREAM | $1, 0)) == -1) + exit(2); + + exit(0); +#endif +} +] +, [ AC_MSG_RESULT([yes]) AC_DEFINE(USE_$1, 1, [Define to use $1 with socket()]) ] +, [ AC_MSG_RESULT([no]) ] +) +])dnl + +dnl check for SOCK_CLOEXEC +JK_CHECK_SOCKOPT(SOCK_CLOEXEC) + dnl check for poll.h header AC_CHECK_HEADERS(poll.h) dnl check for poll function --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org