Skip to content

Commit a9351e1

Browse files
authored
IXSocketServer: memset() sock addr before bind (#553)
1 parent 2efe037 commit a9351e1

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

ixwebsocket/IXSocketServer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ namespace ix
101101
if (_addressFamily == AF_INET)
102102
{
103103
struct sockaddr_in server;
104+
memset(&server, '\0', sizeof(server));
104105
server.sin_family = _addressFamily;
105106
server.sin_port = htons(_port);
106107

@@ -130,6 +131,7 @@ namespace ix
130131
else // AF_INET6
131132
{
132133
struct sockaddr_in6 server;
134+
memset(&server, '\0', sizeof(server));
133135
server.sin6_family = _addressFamily;
134136
server.sin6_port = htons(_port);
135137

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ set (TEST_TARGET_NAMES
2626
IXExponentialBackoffTest
2727
IXWebSocketCloseTest
2828
IXWebSocketHostTest
29+
IXWebSocketIPv6Test
2930
)
3031

3132
# Some unittest don't work on windows yet

test/IXWebSocketIPv6Test.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include "IXTest.h"
2+
#include "catch.hpp"
3+
#include <ixwebsocket/IXWebSocket.h>
4+
#include <ixwebsocket/IXWebSocketServer.h>
5+
6+
using namespace ix;
7+
8+
TEST_CASE("IPv6")
9+
{
10+
SECTION("Listening on ::1 works with AF_INET6 works")
11+
{
12+
int port = getFreePort();
13+
ix::WebSocketServer server(port,
14+
"::1",
15+
SocketServer::kDefaultTcpBacklog,
16+
SocketServer::kDefaultMaxConnections,
17+
WebSocketServer::kDefaultHandShakeTimeoutSecs,
18+
AF_INET6);
19+
20+
auto res = server.listen();
21+
CHECK(res.first);
22+
server.start();
23+
server.stop();
24+
}
25+
}

0 commit comments

Comments
 (0)