X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=lhnet.c;h=7f9664c05da90dc410509fd7b983224af87579a7;hb=179be6fd1f715bac570e73aa9cadb0e08d0f7979;hp=cd60917f611d3293389b90d4b78e0ae237d4b2a0;hpb=1d4d9abf2bf73286acb29a21878d44109c84af0c;p=xonotic%2Fdarkplaces.git diff --git a/lhnet.c b/lhnet.c index cd60917f..7f9664c0 100644 --- a/lhnet.c +++ b/lhnet.c @@ -1,17 +1,20 @@ // Written by Forest Hale 2003-06-15 and placed into public domain. -#ifdef SUPPORTIPV6 #ifdef WIN32 +#ifdef _MSC_VER +#pragma comment(lib, "ws2_32.lib") +#endif +# ifdef SUPPORTIPV6 // Windows XP or higher is required for getaddrinfo, but the inclusion of wspiapi provides fallbacks for older versions # define _WIN32_WINNT 0x0501 +# endif # include # include # ifdef USE_WSPIAPI_H # include # endif #endif -#endif #ifndef STANDALONETEST #include "quakedef.h" @@ -21,10 +24,7 @@ #include #include #include -#ifdef WIN32 -#include -#include -#else +#ifndef WIN32 #include #include #include @@ -124,7 +124,7 @@ int LHNETADDRESS_FromPort(lhnetaddress_t *vaddress, lhnetaddresstype_t addressty switch(addresstype) { default: - return 0; + break; case LHNETADDRESSTYPE_LOOP: // local:port (loopback) memset(address, 0, sizeof(*address)); @@ -389,8 +389,12 @@ int LHNETADDRESS_FromString(lhnetaddress_t *vaddress, const char *string, int de address->addresstype = LHNETADDRESSTYPE_NONE; port = 0; colon = strrchr(string, ':'); - if (colon) + if (colon && (colon == strchr(string, ':') || (string[0] == '[' && colon - string > 0 && colon[-1] == ']'))) + // EITHER: colon is the ONLY colon OR: colon comes after [...] delimited IPv6 address + // fixes misparsing of IPv6 addresses without port + { port = atoi(colon + 1); + } else colon = string + strlen(string); if (port == 0) @@ -839,7 +843,11 @@ void LHNET_SleepUntilPacket_Microseconds(int microseconds) { if (lastfd < s->inetsocket) lastfd = s->inetsocket; +#if defined(WIN32) && !defined(_MSC_VER) + FD_SET((int)s->inetsocket, &fdreadset); +#else FD_SET((unsigned int)s->inetsocket, &fdreadset); +#endif } } tv.tv_sec = microseconds / 1000000; @@ -1099,7 +1107,7 @@ int LHNET_Read(lhnetsocket_t *lhnetsocket, void *content, int maxcontentlength, Con_Print("Connection refused\n"); return 0; } - Con_Printf("LHNET_Read: recvfrom returned error: %s\n", LHNETPRIVATE_StrError()); + Con_DPrintf("LHNET_Read: recvfrom returned error: %s\n", LHNETPRIVATE_StrError()); } } #ifdef SUPPORTIPV6 @@ -1108,7 +1116,7 @@ int LHNET_Read(lhnetsocket_t *lhnetsocket, void *content, int maxcontentlength, SOCKLEN_T inetaddresslength; address->addresstype = LHNETADDRESSTYPE_NONE; inetaddresslength = sizeof(address->addr.in6); - value = recvfrom(lhnetsocket->inetsocket, (char *)content, maxcontentlength, 0, &address->addr.sock, &inetaddresslength); + value = recvfrom(lhnetsocket->inetsocket, (char *)content, maxcontentlength, LHNET_RECVFROM_FLAGS, &address->addr.sock, &inetaddresslength); if (value > 0) { address->addresstype = LHNETADDRESSTYPE_INET6; @@ -1126,7 +1134,7 @@ int LHNET_Read(lhnetsocket_t *lhnetsocket, void *content, int maxcontentlength, Con_Print("Connection refused\n"); return 0; } - Con_Printf("LHNET_Read: recvfrom returned error: %s\n", LHNETPRIVATE_StrError()); + Con_DPrintf("LHNET_Read: recvfrom returned error: %s\n", LHNETPRIVATE_StrError()); } } #endif @@ -1167,7 +1175,7 @@ int LHNET_Write(lhnetsocket_t *lhnetsocket, const void *content, int contentleng { if (SOCKETERRNO == EWOULDBLOCK) return 0; - Con_Printf("LHNET_Write: sendto returned error: %s\n", LHNETPRIVATE_StrError()); + Con_DPrintf("LHNET_Write: sendto returned error: %s\n", LHNETPRIVATE_StrError()); } } #ifdef SUPPORTIPV6 @@ -1178,7 +1186,7 @@ int LHNET_Write(lhnetsocket_t *lhnetsocket, const void *content, int contentleng { if (SOCKETERRNO == EWOULDBLOCK) return 0; - Con_Printf("LHNET_Write: sendto returned error: %s\n", LHNETPRIVATE_StrError()); + Con_DPrintf("LHNET_Write: sendto returned error: %s\n", LHNETPRIVATE_StrError()); } } #endif