Skip to content

Commit b213063

Browse files
committed
uwp build fix + more ivp6 support
1 parent fbd1768 commit b213063

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

ixwebsocket/IXSocketServer.cpp

+39-3
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ namespace ix
276276
}
277277

278278
// Accept a connection.
279+
// FIXME: Is this working for ipv6 ?
279280
struct sockaddr_in client; // client address information
280281
int clientFd; // socket connected to client
281282
socklen_t addressLen = sizeof(client);
@@ -307,9 +308,44 @@ namespace ix
307308
continue;
308309
}
309310

310-
// FIXME error handling
311-
char *remoteIp = inet_ntoa(client.sin_addr);
312-
auto connectionInfo = std::make_unique<ConnectionInfo>(remoteIp, client.sin_port);
311+
std::unique_ptr<ConnectionInfo> connectionInfo;
312+
313+
if (_addressFamily == AF_INET)
314+
{
315+
char remoteIp[INET_ADDRSTRLEN];
316+
if (inet_ntop(AF_INET, &client.sin_addr, remoteIp, INET_ADDRSTRLEN) == nullptr)
317+
{
318+
int err = Socket::getErrno();
319+
std::stringstream ss;
320+
ss << "SocketServer::run() error calling inet_ntop (ipv4): " << err << ", "
321+
<< strerror(err);
322+
logError(ss.str());
323+
324+
Socket::closeSocket(clientFd);
325+
326+
continue;
327+
}
328+
329+
connectionInfo = std::make_unique<ConnectionInfo>(remoteIp, client.sin_port);
330+
}
331+
else // AF_INET6
332+
{
333+
char remoteIp[INET6_ADDRSTRLEN];
334+
if (inet_ntop(AF_INET6, &client.sin_addr, remoteIp, INET6_ADDRSTRLEN) == nullptr)
335+
{
336+
int err = Socket::getErrno();
337+
std::stringstream ss;
338+
ss << "SocketServer::run() error calling inet_ntop (ipv6): " << err << ", "
339+
<< strerror(err);
340+
logError(ss.str());
341+
342+
Socket::closeSocket(clientFd);
343+
344+
continue;
345+
}
346+
347+
connectionInfo = std::make_unique<ConnectionInfo>(remoteIp, client.sin_port);
348+
}
313349

314350
std::shared_ptr<ConnectionState> connectionState;
315351
if (_connectionStateFactory)

0 commit comments

Comments
 (0)