Merge pull request #9308 from kareem-wolfssl/zd20603

Add IPv6 support to wolfSSL_BIO_new_accept and wolfIO_TcpBind.
This commit is contained in:
David Garske
2025-11-12 11:09:17 -08:00
committed by GitHub
2 changed files with 25 additions and 1 deletions

View File

@@ -2440,9 +2440,21 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio)
{
WOLFSSL_BIO *bio;
WOLFSSL_ENTER("wolfSSL_BIO_new_accept");
if (port == NULL) {
return NULL;
}
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket());
if (bio) {
bio->port = (word16)XATOI(port);
const char* portStr = port;
#ifdef WOLFSSL_IPV6
const char* ipv6End = XSTRSTR(port, "]");
if (ipv6End) {
portStr = XSTRSTR(ipv6End, ":");
}
#endif
bio->port = (word16)XATOI(portStr);
bio->type = WOLFSSL_BIO_SOCKET;
}
return bio;

View File

@@ -1554,8 +1554,13 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
#ifdef HAVE_SOCKADDR
int ret = 0;
SOCKADDR_S addr;
#ifdef WOLFSSL_IPV6
socklen_t sockaddr_len = sizeof(SOCKADDR_IN6);
SOCKADDR_IN6 *sin = (SOCKADDR_IN6 *)&addr;
#else
socklen_t sockaddr_len = sizeof(SOCKADDR_IN);
SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr;
#endif
if (sockfd == NULL || port < 1) {
return WOLFSSL_FATAL_ERROR;
@@ -1563,10 +1568,17 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
XMEMSET(&addr, 0, sizeof(addr));
#ifdef WOLFSSL_IPV6
sin->sin6_family = AF_INET6;
sin->sin6_addr = in6addr_any;
sin->sin6_port = XHTONS(port);
*sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM, 0);
#else
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = INADDR_ANY;
sin->sin_port = XHTONS(port);
*sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0);
#endif
#ifdef USE_WINDOWS_API
if (*sockfd == SOCKET_INVALID)