You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2009/12/21 09:31:40 UTC
svn commit: r892725 - in /tomcat/jk/trunk/native: common/jk_connect.c
configure.in
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org