Skip to content

Commit 7cfffd5

Browse files
authored
Merge pull request #9308 from kareem-wolfssl/zd20603
Add IPv6 support to wolfSSL_BIO_new_accept and wolfIO_TcpBind.
2 parents 92fffa1 + fbb7ae2 commit 7cfffd5

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

src/bio.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2440,9 +2440,21 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio)
24402440
{
24412441
WOLFSSL_BIO *bio;
24422442
WOLFSSL_ENTER("wolfSSL_BIO_new_accept");
2443+
2444+
if (port == NULL) {
2445+
return NULL;
2446+
}
2447+
24432448
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket());
24442449
if (bio) {
2445-
bio->port = (word16)XATOI(port);
2450+
const char* portStr = port;
2451+
#ifdef WOLFSSL_IPV6
2452+
const char* ipv6End = XSTRSTR(port, "]");
2453+
if (ipv6End) {
2454+
portStr = XSTRSTR(ipv6End, ":");
2455+
}
2456+
#endif
2457+
bio->port = (word16)XATOI(portStr);
24462458
bio->type = WOLFSSL_BIO_SOCKET;
24472459
}
24482460
return bio;

src/wolfio.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,19 +1554,31 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
15541554
#ifdef HAVE_SOCKADDR
15551555
int ret = 0;
15561556
SOCKADDR_S addr;
1557+
#ifdef WOLFSSL_IPV6
1558+
socklen_t sockaddr_len = sizeof(SOCKADDR_IN6);
1559+
SOCKADDR_IN6 *sin = (SOCKADDR_IN6 *)&addr;
1560+
#else
15571561
socklen_t sockaddr_len = sizeof(SOCKADDR_IN);
15581562
SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr;
1563+
#endif
15591564

15601565
if (sockfd == NULL || port < 1) {
15611566
return WOLFSSL_FATAL_ERROR;
15621567
}
15631568

15641569
XMEMSET(&addr, 0, sizeof(addr));
15651570

1571+
#ifdef WOLFSSL_IPV6
1572+
sin->sin6_family = AF_INET6;
1573+
sin->sin6_addr = in6addr_any;
1574+
sin->sin6_port = XHTONS(port);
1575+
*sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM, 0);
1576+
#else
15661577
sin->sin_family = AF_INET;
15671578
sin->sin_addr.s_addr = INADDR_ANY;
15681579
sin->sin_port = XHTONS(port);
15691580
*sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0);
1581+
#endif
15701582

15711583
#ifdef USE_WINDOWS_API
15721584
if (*sockfd == SOCKET_INVALID)

0 commit comments

Comments
 (0)