|
24 | 24 | #define WOLFSSL_STRERROR_BUFFER_SIZE 256 |
25 | 25 | #endif |
26 | 26 |
|
27 | | -/* Enable GNU extensions for accept4() on Linux/glibc. Must be defined |
28 | | - * before any system headers are included. Excluded for Zephyr and other |
29 | | - * embedded RTOSes whose libc layers conflict with glibc-style definitions |
30 | | - * (e.g., Zephyr's socket_select.h vs. glibc's fd_set). */ |
31 | | -#if (defined(__linux__) || defined(__ANDROID__)) && \ |
32 | | - !defined(WOLFSSL_ZEPHYR) && !defined(_GNU_SOURCE) |
33 | | - #define _GNU_SOURCE 1 |
34 | | -#endif |
35 | | - |
36 | 27 | #include <wolfssl/wolfcrypt/libwolfssl_sources.h> |
37 | 28 |
|
38 | 29 | #ifndef WOLFCRYPT_ONLY |
|
51 | 42 | #include <wolfssl/wolfio.h> |
52 | 43 | #include <wolfssl/wolfcrypt/logging.h> |
53 | 44 |
|
54 | | -/* SOCK_CLOEXEC sets close-on-exec atomically when the socket is created; |
55 | | - * fall back to a no-op flag value where it isn't supported. */ |
56 | | -#ifndef SOCK_CLOEXEC |
57 | | - #define SOCK_CLOEXEC 0 |
58 | | -#endif |
59 | 45 |
|
60 | 46 | #ifdef NUCLEUS_PLUS_2_3 |
61 | 47 | /* Holds last Nucleus networking error number */ |
@@ -1509,17 +1495,7 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) |
1509 | 1495 | } |
1510 | 1496 | #endif |
1511 | 1497 |
|
1512 | | - *sockfd = (SOCKET_T)socket(addr.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); |
1513 | | -#if !defined(USE_WINDOWS_API) && defined(FD_CLOEXEC) |
1514 | | - if (*sockfd <= SOCKET_INVALID && errno == EINVAL) { |
1515 | | - *sockfd = (SOCKET_T)socket(addr.ss_family, SOCK_STREAM, 0); |
1516 | | - if (*sockfd > SOCKET_INVALID) { |
1517 | | - int fdFlags = fcntl(*sockfd, F_GETFD); |
1518 | | - if (fdFlags >= 0) |
1519 | | - (void)fcntl(*sockfd, F_SETFD, fdFlags | FD_CLOEXEC); |
1520 | | - } |
1521 | | - } |
1522 | | -#endif |
| 1498 | + *sockfd = (SOCKET_T)wc_socket_cloexec(addr.ss_family, SOCK_STREAM, 0); |
1523 | 1499 | #ifdef USE_WINDOWS_API |
1524 | 1500 | if (*sockfd == SOCKET_INVALID) |
1525 | 1501 | #else |
@@ -1597,32 +1573,12 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) |
1597 | 1573 | sin->sin6_family = AF_INET6; |
1598 | 1574 | sin->sin6_addr = in6addr_any; |
1599 | 1575 | sin->sin6_port = XHTONS(port); |
1600 | | - *sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM | SOCK_CLOEXEC, 0); |
1601 | | -#if !defined(USE_WINDOWS_API) && defined(FD_CLOEXEC) |
1602 | | - if (*sockfd <= SOCKET_INVALID && errno == EINVAL) { |
1603 | | - *sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM, 0); |
1604 | | - if (*sockfd > SOCKET_INVALID) { |
1605 | | - int fdFlags = fcntl(*sockfd, F_GETFD); |
1606 | | - if (fdFlags >= 0) |
1607 | | - (void)fcntl(*sockfd, F_SETFD, fdFlags | FD_CLOEXEC); |
1608 | | - } |
1609 | | - } |
1610 | | -#endif |
| 1576 | + *sockfd = (SOCKET_T)wc_socket_cloexec(AF_INET6, SOCK_STREAM, 0); |
1611 | 1577 | #else |
1612 | 1578 | sin->sin_family = AF_INET; |
1613 | 1579 | sin->sin_addr.s_addr = INADDR_ANY; |
1614 | 1580 | sin->sin_port = XHTONS(port); |
1615 | | - *sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); |
1616 | | -#if !defined(USE_WINDOWS_API) && defined(FD_CLOEXEC) |
1617 | | - if (*sockfd <= SOCKET_INVALID && errno == EINVAL) { |
1618 | | - *sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0); |
1619 | | - if (*sockfd > SOCKET_INVALID) { |
1620 | | - int fdFlags = fcntl(*sockfd, F_GETFD); |
1621 | | - if (fdFlags >= 0) |
1622 | | - (void)fcntl(*sockfd, F_SETFD, fdFlags | FD_CLOEXEC); |
1623 | | - } |
1624 | | - } |
1625 | | -#endif |
| 1581 | + *sockfd = (SOCKET_T)wc_socket_cloexec(AF_INET, SOCK_STREAM, 0); |
1626 | 1582 | #endif |
1627 | 1583 |
|
1628 | 1584 | #ifdef USE_WINDOWS_API |
@@ -1668,31 +1624,7 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) |
1668 | 1624 | #ifdef HAVE_SOCKADDR |
1669 | 1625 | int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, XSOCKLENT* peer_len) |
1670 | 1626 | { |
1671 | | - int fd; |
1672 | | -#if !defined(USE_WINDOWS_API) && !defined(WOLFSSL_ZEPHYR) && \ |
1673 | | - (defined(__linux__) || defined(__ANDROID__)) |
1674 | | - fd = (int)accept4(sockfd, peer_addr, peer_len, SOCK_CLOEXEC); |
1675 | | - if (fd < 0 && (errno == ENOSYS || errno == EINVAL)) { |
1676 | | - fd = (int)accept(sockfd, peer_addr, peer_len); |
1677 | | - #ifdef FD_CLOEXEC |
1678 | | - if (fd >= 0) { |
1679 | | - int fdFlags = fcntl(fd, F_GETFD); |
1680 | | - if (fdFlags >= 0) |
1681 | | - (void)fcntl(fd, F_SETFD, fdFlags | FD_CLOEXEC); |
1682 | | - } |
1683 | | - #endif |
1684 | | - } |
1685 | | -#else |
1686 | | - fd = (int)accept(sockfd, peer_addr, peer_len); |
1687 | | -#if defined(FD_CLOEXEC) && !defined(USE_WINDOWS_API) |
1688 | | - if (fd >= 0) { |
1689 | | - int fdFlags = fcntl(fd, F_GETFD); |
1690 | | - if (fdFlags >= 0) |
1691 | | - (void)fcntl(fd, F_SETFD, fdFlags | FD_CLOEXEC); |
1692 | | - } |
1693 | | -#endif |
1694 | | -#endif |
1695 | | - return fd; |
| 1627 | + return wc_accept_cloexec((int)sockfd, peer_addr, peer_len); |
1696 | 1628 | } |
1697 | 1629 | #endif /* HAVE_SOCKADDR */ |
1698 | 1630 |
|
|
0 commit comments