}
#ifdef SUPPORTIPV6
-int LHNETADDRESS_Resolve(lhnetaddressnative_t *address, const char *name, int port)
+static int LHNETADDRESS_Resolve(lhnetaddressnative_t *address, const char *name, int port)
{
char port_buff [16];
struct addrinfo hints;
return LHNETADDRESSTYPE_NONE;
}
-const char *LHNETADDRESS_GetInterfaceName(const lhnetaddress_t *vaddress)
+const char *LHNETADDRESS_GetInterfaceName(const lhnetaddress_t *vaddress, char *ifname, size_t ifnamelength)
{
#ifdef SUPPORTIPV6
lhnetaddressnative_t *address = (lhnetaddressnative_t *)vaddress;
{
#ifndef _WIN32
- static char ifname [IF_NAMESIZE];
-
if (if_indextoname(address->addr.in6.sin6_scope_id, ifname) == ifname)
return ifname;
// The Win32 API doesn't have if_indextoname() until Windows Vista,
// but luckily it just uses the interface ID as the interface name
- static char ifname [16];
-
- if (dpsnprintf(ifname, sizeof(ifname), "%lu", address->addr.in6.sin6_scope_id) > 0)
+ if (dpsnprintf(ifname, ifnamelength, "%lu", address->addr.in6.sin6_scope_id) > 0)
return ifname;
#endif
lhnetaddressnative_t *localaddress = (lhnetaddressnative_t *)&lhnetsocket->address;
SOCKLEN_T namelen;
int bindresult;
+
+#if defined(SOL_RFC1149) && defined(RFC1149_1149ONLY)
+ // we got reports of massive lags when this protocol was chosen as transport
+ // so better turn it off
+ {
+ int rfc1149only = 0;
+ int rfc1149enabled = 0;
+ if(setsockopt(lhnetsocket->inetsocket, SOL_RFC1149, RFC1149_1149ONLY, &rfc1149only))
+ Con_Printf("LHNET_OpenSocket_Connectionless: warning: setsockopt(RFC1149_1149ONLY) returned error: %s\n", LHNETPRIVATE_StrError());
+ if(setsockopt(lhnetsocket->inetsocket, SOL_RFC1149, RFC1149_ENABLED, &rfc1149enabled))
+ Con_Printf("LHNET_OpenSocket_Connectionless: warning: setsockopt(RFC1149_ENABLED) returned error: %s\n", LHNETPRIVATE_StrError());
+ }
+#endif
+
#ifdef SUPPORTIPV6
if (address->addresstype == LHNETADDRESSTYPE_INET6)
{