diff --git a/ixwebsocket/IXSocketServer.cpp b/ixwebsocket/IXSocketServer.cpp index c4ea1afb..a0d98cff 100644 --- a/ixwebsocket/IXSocketServer.cpp +++ b/ixwebsocket/IXSocketServer.cpp @@ -101,6 +101,7 @@ namespace ix if (_addressFamily == AF_INET) { struct sockaddr_in server; + memset(&server, '\0', sizeof(server)); server.sin_family = _addressFamily; server.sin_port = htons(_port); @@ -130,6 +131,7 @@ namespace ix else // AF_INET6 { struct sockaddr_in6 server; + memset(&server, '\0', sizeof(server)); server.sin6_family = _addressFamily; server.sin6_port = htons(_port); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index bee57beb..b5fe5fbe 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -26,6 +26,7 @@ set (TEST_TARGET_NAMES IXExponentialBackoffTest IXWebSocketCloseTest IXWebSocketHostTest + IXWebSocketIPv6Test ) # Some unittest don't work on windows yet diff --git a/test/IXWebSocketIPv6Test.cpp b/test/IXWebSocketIPv6Test.cpp new file mode 100644 index 00000000..94e5df3c --- /dev/null +++ b/test/IXWebSocketIPv6Test.cpp @@ -0,0 +1,25 @@ +#include "IXTest.h" +#include "catch.hpp" +#include +#include + +using namespace ix; + +TEST_CASE("IPv6") +{ + SECTION("Listening on ::1 works with AF_INET6 works") + { + int port = getFreePort(); + ix::WebSocketServer server(port, + "::1", + SocketServer::kDefaultTcpBacklog, + SocketServer::kDefaultMaxConnections, + WebSocketServer::kDefaultHandShakeTimeoutSecs, + AF_INET6); + + auto res = server.listen(); + CHECK(res.first); + server.start(); + server.stop(); + } +}