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:
Dimon4eg 2019-04-26 02:26:53 +03:00 committed by Benjamin Sergeant
parent e251c81d43
commit 4fbc4e3be9
7 changed files with 56 additions and 5 deletions

View File

@ -26,6 +26,7 @@ set( IXWEBSOCKET_SOURCES
ixwebsocket/IXSocketFactory.cpp
ixwebsocket/IXDNSLookup.cpp
ixwebsocket/IXCancellationRequest.cpp
ixwebsocket/IXNetSystem.cpp
ixwebsocket/IXWebSocket.cpp
ixwebsocket/IXWebSocketServer.cpp
ixwebsocket/IXWebSocketTransport.cpp
@ -49,6 +50,7 @@ set( IXWEBSOCKET_HEADERS
ixwebsocket/IXSetThreadName.h
ixwebsocket/IXDNSLookup.h
ixwebsocket/IXCancellationRequest.h
ixwebsocket/IXNetSystem.h
ixwebsocket/IXProgressCallback.h
ixwebsocket/IXWebSocket.h
ixwebsocket/IXWebSocketServer.h

View File

@ -27,7 +27,7 @@ namespace ix
_done(false),
_id(_nextId++)
{
initNetSystem();
}
DNSLookup::~DNSLookup()
@ -137,6 +137,11 @@ namespace ix
return nullptr;
}
if (!_errMsg.empty())
{
errMsg = _errMsg;
}
std::unique_lock<std::mutex> rlock(_resMutex);
return _res;
}

View 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
}
}

View File

@ -23,3 +23,9 @@
# include <sys/time.h>
# include <unistd.h>
#endif
namespace ix
{
bool initNetSystem();
bool uninitNetSystem();
}

View File

@ -57,10 +57,10 @@ namespace ix
SocketConnect::configure(fd);
if (::connect(fd, address->ai_addr, address->ai_addrlen) == -1
&& errno != EINPROGRESS)
&& errno != EINPROGRESS && errno != 0)
{
closeSocket(fd);
errMsg = strerror(errno);
closeSocket(fd);
return -1;
}

View File

@ -113,7 +113,7 @@ namespace ix
}
struct sockaddr_in sa; // server address information
socklen_t len;
socklen_t len = sizeof(sa);
if (getsockname(sockfd, (struct sockaddr *) &sa, &len) < 0)
{
log("Cannot compute a free port. getsockname error.");

View File

@ -52,6 +52,5 @@ namespace ix
void log(const std::string& msg);
bool computeFreePorts(int count);
int getFreePort();
}