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)
{
if (lastfd < s->inetsocket)
lastfd = s->inetsocket;
-#ifdef WIN32
+#if defined(WIN32) && !defined(_MSC_VER)
FD_SET((int)s->inetsocket, &fdreadset);
#else
FD_SET((unsigned int)s->inetsocket, &fdreadset);
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
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;
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
{
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
{
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