diff --git a/ext/miniupnpc/connecthostport.c b/ext/miniupnpc/connecthostport.c index aed62c76e3..7eac33e428 100644 --- a/ext/miniupnpc/connecthostport.c +++ b/ext/miniupnpc/connecthostport.c @@ -74,7 +74,11 @@ int connecthostport(const char * host, unsigned short port, struct addrinfo hints; #endif /* #ifdef USE_GETHOSTBYNAME */ #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT +#ifdef _WIN32 + DWORD timeout; +#else struct timeval timeout; +#endif #endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ #ifdef USE_GETHOSTBYNAME @@ -94,15 +98,25 @@ int connecthostport(const char * host, unsigned short port, } #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT /* setting a 3 seconds timeout for the connect() call */ +#ifdef _WIN32 + timeout = 3000; /* milliseconds */ + if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeout, sizeof(timeout)) < 0) +#else timeout.tv_sec = 3; timeout.tv_usec = 0; if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0) +#endif { PRINT_SOCKET_ERROR("setsockopt SO_RCVTIMEO"); } +#ifdef _WIN32 + timeout = 3000; /* milliseconds */ + if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (const char *)&timeout, sizeof(timeout)) < 0) +#else timeout.tv_sec = 3; timeout.tv_usec = 0; if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0) +#endif { PRINT_SOCKET_ERROR("setsockopt SO_SNDTIMEO"); } @@ -193,15 +207,25 @@ int connecthostport(const char * host, unsigned short port, } #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT /* setting a 3 seconds timeout for the connect() call */ +#ifdef _WIN32 + timeout = 3000; /* milliseconds */ + if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeout, sizeof(timeout)) < 0) +#else timeout.tv_sec = 3; timeout.tv_usec = 0; if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0) +#endif { PRINT_SOCKET_ERROR("setsockopt"); } +#ifdef _WIN32 + timeout = 3000; /* milliseconds */ + if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (const char *)&timeout, sizeof(timeout)) < 0) +#else timeout.tv_sec = 3; timeout.tv_usec = 0; if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0) +#endif { PRINT_SOCKET_ERROR("setsockopt"); }