Commit 2c5858513e2bd00c92f27b356f5bd3ed35b92ce0
1 parent
b94ba026
Use accept4 with SOCK_CLOEXEC when available (Linux)
Showing
2 changed files
with
9 additions
and
1 deletions
configure.ac
| @@ -101,7 +101,7 @@ AC_CHECK_DECLS([__CYGWIN__]) | @@ -101,7 +101,7 @@ AC_CHECK_DECLS([__CYGWIN__]) | ||
| 101 | 101 | ||
| 102 | # Checks for library functions. | 102 | # Checks for library functions. |
| 103 | AC_FUNC_FORK | 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 | # Add -Wall -Werror for GCC if not already there | 106 | # Add -Wall -Werror for GCC if not already there |
| 107 | if test "x$GCC" = "xyes"; then | 107 | if test "x$GCC" = "xyes"; then |
src/modbus-tcp.c
| @@ -16,6 +16,8 @@ | @@ -16,6 +16,8 @@ | ||
| 16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 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 | #include <stdio.h> | 21 | #include <stdio.h> |
| 20 | #include <stdlib.h> | 22 | #include <stdlib.h> |
| 21 | #include <string.h> | 23 | #include <string.h> |
| @@ -526,7 +528,13 @@ int modbus_tcp_accept(modbus_t *ctx, int *socket) | @@ -526,7 +528,13 @@ int modbus_tcp_accept(modbus_t *ctx, int *socket) | ||
| 526 | socklen_t addrlen; | 528 | socklen_t addrlen; |
| 527 | 529 | ||
| 528 | addrlen = sizeof(addr); | 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 | ctx->s = accept(*socket, (struct sockaddr *)&addr, &addrlen); | 535 | ctx->s = accept(*socket, (struct sockaddr *)&addr, &addrlen); |
| 536 | +#endif | ||
| 537 | + | ||
| 530 | if (ctx->s == -1) { | 538 | if (ctx->s == -1) { |
| 531 | close(*socket); | 539 | close(*socket); |
| 532 | *socket = 0; | 540 | *socket = 0; |