// Written by Forest Hale 2003-06-15 and placed into public domain.
+#ifdef WIN32
+// Windows XP or higher is required for getaddrinfo, but the inclusion of wspiapi provides fallbacks for older versions
+#define _WIN32_WINNT 0x0501
+#include <winsock2.h>
+#include <ws2tcpip.h>
+//#include <wspiapi.h>
+#endif
+
#ifndef STANDALONETEST
#include "quakedef.h"
#endif
#include <stdio.h>
#include <time.h>
#include <string.h>
-#ifdef WIN32
-#define _WIN32_WINNT 0x0501
- // Windows XP or higher is required for getaddrinfo
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
+#ifndef WIN32
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
if (err != 0 || addrinf == NULL)
return 0;
if (addrinf->ai_addr->sa_family != AF_INET6 && addrinf->ai_addr->sa_family != AF_INET)
+ {
+ freeaddrinfo (addrinf);
return 0;
+ }
// great it worked
if (addrinf->ai_addr->sa_family == AF_INET6)
int ipv6_only = 1;
if (address->addresstype != LHNETADDRESSTYPE_INET6
|| setsockopt (lhnetsocket->inetsocket, IPPROTO_IPV6, IPV6_V6ONLY,
- (const void *)&ipv6_only, sizeof(ipv6_only)) == 0
+ (const char *)&ipv6_only, sizeof(ipv6_only)) == 0
#ifdef WIN32
// The Win32 API only supports IPV6_V6ONLY since Windows Vista, but fortunately
// the default value is what we want on Win32 anyway (IPV6_V6ONLY = true)
}
else if (lhnetsocket->address.addresstype == LHNETADDRESSTYPE_INET4)
{
- unsigned int inetaddresslength;
+ SOCKLEN_T inetaddresslength;
address->addresstype = LHNETADDRESSTYPE_NONE;
inetaddresslength = sizeof(address->addr.in);
- value = recvfrom(lhnetsocket->inetsocket, content, maxcontentlength, 0, &address->addr.sock, &inetaddresslength);
+ value = recvfrom(lhnetsocket->inetsocket, (char *)content, maxcontentlength, 0, &address->addr.sock, &inetaddresslength);
if (value > 0)
{
address->addresstype = LHNETADDRESSTYPE_INET4;
}
else if (lhnetsocket->address.addresstype == LHNETADDRESSTYPE_INET6)
{
- unsigned int inetaddresslength;
+ SOCKLEN_T inetaddresslength;
address->addresstype = LHNETADDRESSTYPE_NONE;
inetaddresslength = sizeof(address->addr.in6);
- value = recvfrom(lhnetsocket->inetsocket, content, maxcontentlength, 0, &address->addr.sock, &inetaddresslength);
+ value = recvfrom(lhnetsocket->inetsocket, (char *)content, maxcontentlength, 0, &address->addr.sock, &inetaddresslength);
if (value > 0)
{
address->addresstype = LHNETADDRESSTYPE_INET6;
}
else if (lhnetsocket->address.addresstype == LHNETADDRESSTYPE_INET4)
{
- value = sendto(lhnetsocket->inetsocket, content, contentlength, 0, (struct sockaddr *)&address->addr.in, sizeof(struct sockaddr_in));
+ value = sendto(lhnetsocket->inetsocket, (char *)content, contentlength, 0, (struct sockaddr *)&address->addr.in, sizeof(struct sockaddr_in));
if (value == -1)
{
if (SOCKETERRNO == EWOULDBLOCK)
}
else if (lhnetsocket->address.addresstype == LHNETADDRESSTYPE_INET6)
{
- value = sendto(lhnetsocket->inetsocket, content, contentlength, 0, (struct sockaddr *)&address->addr.in6, sizeof(struct sockaddr_in6));
+ value = sendto(lhnetsocket->inetsocket, (char *)content, contentlength, 0, (struct sockaddr *)&address->addr.in6, sizeof(struct sockaddr_in6));
if (value == -1)
{
if (SOCKETERRNO == EWOULDBLOCK)