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:
		
				
					committed by
					
						
						Benjamin Sergeant
					
				
			
			
				
	
			
			
			
						parent
						
							561eac816b
						
					
				
				
					commit
					22fcdc0e2e
				
			@@ -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();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user