Skip to content

Commit 8d41d1c

Browse files
Add IPv6 support to wolfSSL_BIO_new_accept and wolfIO_TcpBind.
1 parent 4dbf96b commit 8d41d1c

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/bio.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2442,7 +2442,14 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio)
24422442
WOLFSSL_ENTER("wolfSSL_BIO_new_accept");
24432443
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket());
24442444
if (bio) {
2445-
bio->port = (word16)XATOI(port);
2445+
const char* portStr = port;
2446+
#ifdef WOLFSSL_IPV6
2447+
const char* ipv6End = XSTRSTR(port, "]");
2448+
if (ipv6End) {
2449+
portStr = XSTRSTR(ipv6End, ":");
2450+
}
2451+
#endif
2452+
bio->port = (word16)XATOI(portStr);
24462453
bio->type = WOLFSSL_BIO_SOCKET;
24472454
}
24482455
return bio;

src/wolfio.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,19 +1508,31 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
15081508
#ifdef HAVE_SOCKADDR
15091509
int ret = 0;
15101510
SOCKADDR_S addr;
1511+
#ifdef WOLFSSL_IPV6
1512+
socklen_t sockaddr_len = sizeof(SOCKADDR_IN6);
1513+
SOCKADDR_IN6 *sin = (SOCKADDR_IN6 *)&addr;
1514+
#else
15111515
socklen_t sockaddr_len = sizeof(SOCKADDR_IN);
15121516
SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr;
1517+
#endif
15131518

15141519
if (sockfd == NULL || port < 1) {
15151520
return WOLFSSL_FATAL_ERROR;
15161521
}
15171522

15181523
XMEMSET(&addr, 0, sizeof(addr));
15191524

1525+
#ifdef WOLFSSL_IPV6
1526+
sin->sin6_family = AF_INET6;
1527+
sin->sin6_addr = in6addr_any;
1528+
sin->sin6_port = XHTONS(port);
1529+
*sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM, 0);
1530+
#else
15201531
sin->sin_family = AF_INET;
15211532
sin->sin_addr.s_addr = INADDR_ANY;
15221533
sin->sin_port = XHTONS(port);
15231534
*sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0);
1535+
#endif
15241536

15251537
#ifdef USE_WINDOWS_API
15261538
if (*sockfd == SOCKET_INVALID)

0 commit comments

Comments
 (0)