Fixes for windows (#45)
* init Net system on Windows * propagate DNS error * Add zlib 1.2.11 sources * link zlib statically for windows * remove not implemented function declaration * fix connect on Windows
This commit is contained in:
parent
e251c81d43
commit
4fbc4e3be9
@ -26,6 +26,7 @@ set( IXWEBSOCKET_SOURCES
|
|||||||
ixwebsocket/IXSocketFactory.cpp
|
ixwebsocket/IXSocketFactory.cpp
|
||||||
ixwebsocket/IXDNSLookup.cpp
|
ixwebsocket/IXDNSLookup.cpp
|
||||||
ixwebsocket/IXCancellationRequest.cpp
|
ixwebsocket/IXCancellationRequest.cpp
|
||||||
|
ixwebsocket/IXNetSystem.cpp
|
||||||
ixwebsocket/IXWebSocket.cpp
|
ixwebsocket/IXWebSocket.cpp
|
||||||
ixwebsocket/IXWebSocketServer.cpp
|
ixwebsocket/IXWebSocketServer.cpp
|
||||||
ixwebsocket/IXWebSocketTransport.cpp
|
ixwebsocket/IXWebSocketTransport.cpp
|
||||||
@ -49,6 +50,7 @@ set( IXWEBSOCKET_HEADERS
|
|||||||
ixwebsocket/IXSetThreadName.h
|
ixwebsocket/IXSetThreadName.h
|
||||||
ixwebsocket/IXDNSLookup.h
|
ixwebsocket/IXDNSLookup.h
|
||||||
ixwebsocket/IXCancellationRequest.h
|
ixwebsocket/IXCancellationRequest.h
|
||||||
|
ixwebsocket/IXNetSystem.h
|
||||||
ixwebsocket/IXProgressCallback.h
|
ixwebsocket/IXProgressCallback.h
|
||||||
ixwebsocket/IXWebSocket.h
|
ixwebsocket/IXWebSocket.h
|
||||||
ixwebsocket/IXWebSocketServer.h
|
ixwebsocket/IXWebSocketServer.h
|
||||||
|
@ -27,7 +27,7 @@ namespace ix
|
|||||||
_done(false),
|
_done(false),
|
||||||
_id(_nextId++)
|
_id(_nextId++)
|
||||||
{
|
{
|
||||||
|
initNetSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
DNSLookup::~DNSLookup()
|
DNSLookup::~DNSLookup()
|
||||||
@ -137,6 +137,11 @@ namespace ix
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_errMsg.empty())
|
||||||
|
{
|
||||||
|
errMsg = _errMsg;
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_lock<std::mutex> rlock(_resMutex);
|
std::unique_lock<std::mutex> rlock(_resMutex);
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
39
ixwebsocket/IXNetSystem.cpp
Normal file
39
ixwebsocket/IXNetSystem.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* IXNetSystem.cpp
|
||||||
|
* Author: Benjamin Sergeant
|
||||||
|
* Copyright (c) 2019 Machine Zone. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "IXNetSystem.h"
|
||||||
|
|
||||||
|
namespace ix
|
||||||
|
{
|
||||||
|
bool initNetSystem()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
WORD wVersionRequested;
|
||||||
|
WSADATA wsaData;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
|
||||||
|
wVersionRequested = MAKEWORD(2, 2);
|
||||||
|
|
||||||
|
err = WSAStartup(wVersionRequested, &wsaData);
|
||||||
|
|
||||||
|
return err == 0;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool uninitNetSystem()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
int err = WSACleanup();
|
||||||
|
|
||||||
|
return err == 0;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
@ -23,3 +23,9 @@
|
|||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace ix
|
||||||
|
{
|
||||||
|
bool initNetSystem();
|
||||||
|
bool uninitNetSystem();
|
||||||
|
}
|
||||||
|
@ -57,10 +57,10 @@ namespace ix
|
|||||||
SocketConnect::configure(fd);
|
SocketConnect::configure(fd);
|
||||||
|
|
||||||
if (::connect(fd, address->ai_addr, address->ai_addrlen) == -1
|
if (::connect(fd, address->ai_addr, address->ai_addrlen) == -1
|
||||||
&& errno != EINPROGRESS)
|
&& errno != EINPROGRESS && errno != 0)
|
||||||
{
|
{
|
||||||
closeSocket(fd);
|
|
||||||
errMsg = strerror(errno);
|
errMsg = strerror(errno);
|
||||||
|
closeSocket(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ namespace ix
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct sockaddr_in sa; // server address information
|
struct sockaddr_in sa; // server address information
|
||||||
socklen_t len;
|
socklen_t len = sizeof(sa);
|
||||||
if (getsockname(sockfd, (struct sockaddr *) &sa, &len) < 0)
|
if (getsockname(sockfd, (struct sockaddr *) &sa, &len) < 0)
|
||||||
{
|
{
|
||||||
log("Cannot compute a free port. getsockname error.");
|
log("Cannot compute a free port. getsockname error.");
|
||||||
|
@ -52,6 +52,5 @@ namespace ix
|
|||||||
|
|
||||||
void log(const std::string& msg);
|
void log(const std::string& msg);
|
||||||
|
|
||||||
bool computeFreePorts(int count);
|
|
||||||
int getFreePort();
|
int getFreePort();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user