Commit 2c5858513e2bd00c92f27b356f5bd3ed35b92ce0

Authored by Stéphane Raimbault
1 parent b94ba026

Use accept4 with SOCK_CLOEXEC when available (Linux)

configure.ac
... ... @@ -101,7 +101,7 @@ AC_CHECK_DECLS([__CYGWIN__])
101 101  
102 102 # Checks for library functions.
103 103 AC_FUNC_FORK
104   -AC_CHECK_FUNCS([gettimeofday inet_ntoa memset select socket strerror strlcpy getaddrinfo])
  104 +AC_CHECK_FUNCS([accept4 getaddrinfo gettimeofday inet_ntoa memset select socket strerror strlcpy])
105 105  
106 106 # Add -Wall -Werror for GCC if not already there
107 107 if test "x$GCC" = "xyes"; then
... ...
src/modbus-tcp.c
... ... @@ -16,6 +16,8 @@
16 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 17 */
18 18  
  19 +/* For accept4 when available */
  20 +#define _GNU_SOURCE
19 21 #include <stdio.h>
20 22 #include <stdlib.h>
21 23 #include <string.h>
... ... @@ -526,7 +528,13 @@ int modbus_tcp_accept(modbus_t *ctx, int *socket)
526 528 socklen_t addrlen;
527 529  
528 530 addrlen = sizeof(addr);
  531 +#ifdef HAVE_ACCEPT4
  532 + /* Inherit socket flags and use accept4 call */
  533 + ctx->s = accept4(*socket, (struct sockaddr *)&addr, &addrlen, SOCK_CLOEXEC);
  534 +#else
529 535 ctx->s = accept(*socket, (struct sockaddr *)&addr, &addrlen);
  536 +#endif
  537 +
530 538 if (ctx->s == -1) {
531 539 close(*socket);
532 540 *socket = 0;
... ...