]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - lhnet.c
Win32: ioctl SIO_UDP_CONNRESET <- FALSE
[xonotic/darkplaces.git] / lhnet.c
diff --git a/lhnet.c b/lhnet.c
index b3f392d85e4a0280b750cb2e4fce40f525d6d169..bc6f53c54980d92d165a60a3358e56a230a4379b 100644 (file)
--- a/lhnet.c
+++ b/lhnet.c
 
 #define SOCKETERRNO WSAGetLastError()
 
+#define IOC_VENDOR 0x18000000
+#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
+#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
+
 #define SOCKLEN_T int
 #elif defined(__MORPHOS__)
 #define ioctlsocket IoctlSocket
@@ -157,7 +161,7 @@ int LHNETADDRESS_FromString(lhnetaddress_t *address, const char *string, int def
 #ifdef STANDALONETEST
        if (i < MAX_NAMECACHE)
 #else
-       if (i < MAX_NAMECACHE && Sys_DoubleTime() < namecache[i].expirationtime)
+       if (i < MAX_NAMECACHE && realtime < namecache[i].expirationtime)
 #endif
        {
                *address = namecache[i].address;
@@ -188,7 +192,7 @@ int LHNETADDRESS_FromString(lhnetaddress_t *address, const char *string, int def
                                namecache[namecacheposition].name[i] = name[i];
                        namecache[namecacheposition].name[i] = 0;
 #ifndef STANDALONETEST
-                       namecache[namecacheposition].expirationtime = Sys_DoubleTime() + 12 * 3600; // 12 hours
+                       namecache[namecacheposition].expirationtime = realtime + 12 * 3600; // 12 hours
 #endif
                        namecache[namecacheposition].address = *address;
                        namecacheposition = (namecacheposition + 1) % MAX_NAMECACHE;
@@ -208,7 +212,7 @@ int LHNETADDRESS_FromString(lhnetaddress_t *address, const char *string, int def
                                namecache[namecacheposition].name[i] = name[i];
                        namecache[namecacheposition].name[i] = 0;
 #ifndef STANDALONETEST
-                       namecache[namecacheposition].expirationtime = Sys_DoubleTime() + 12 * 3600; // 12 hours
+                       namecache[namecacheposition].expirationtime = realtime + 12 * 3600; // 12 hours
 #endif
                        namecache[namecacheposition].address = *address;
                        namecacheposition = (namecacheposition + 1) % MAX_NAMECACHE;
@@ -225,7 +229,7 @@ int LHNETADDRESS_FromString(lhnetaddress_t *address, const char *string, int def
                namecache[namecacheposition].name[i] = name[i];
        namecache[namecacheposition].name[i] = 0;
 #ifndef STANDALONETEST
-       namecache[namecacheposition].expirationtime = Sys_DoubleTime() + 12 * 3600; // 12 hours
+       namecache[namecacheposition].expirationtime = realtime + 12 * 3600; // 12 hours
 #endif
        namecache[namecacheposition].address.addresstype = LHNETADDRESSTYPE_NONE;
        namecacheposition = (namecacheposition + 1) % MAX_NAMECACHE;
@@ -571,6 +575,7 @@ lhnetsocket_t *LHNET_OpenSocket_Connectionless(lhnetaddress_t *address)
                                {
 #ifdef WIN32
                                        u_long _true = 1;
+                                       u_long _false = 0;
 #else
                                        char _true = 1;
 #endif
@@ -588,6 +593,10 @@ lhnetsocket_t *LHNET_OpenSocket_Connectionless(lhnetaddress_t *address)
                                                        lhnetsocket->prev = lhnetsocket->next->prev;
                                                        lhnetsocket->next->prev = lhnetsocket;
                                                        lhnetsocket->prev->next = lhnetsocket;
+#ifdef WIN32
+                                                       if (ioctlsocket(lhnetsocket->inetsocket, SIO_UDP_CONNRESET, &_false) == -1)
+                                                               Con_DPrintf("LHNET_OpenSocket_Connectionless: ioctlsocket SIO_UDP_CONNRESET returned error: %s\n", LHNETPRIVATE_StrError());
+#endif
                                                        return lhnetsocket;
                                                }
                                                else
@@ -666,7 +675,7 @@ int LHNET_Read(lhnetsocket_t *lhnetsocket, void *content, int maxcontentlength,
                                continue;
                        }
 #ifndef STANDALONETEST
-                       if (cl_netlocalping.value && (Sys_DoubleTime() - cl_netlocalping.value * (1.0 / 2000.0)) < p->sentdoubletime)
+                       if (cl_netlocalping.value && (realtime - cl_netlocalping.value * (1.0 / 2000.0)) < p->sentdoubletime)
                                continue;
 #endif
                        if (value == 0 && p->destinationport == lhnetsocket->address.addressdata.loop.port)
@@ -762,7 +771,7 @@ int LHNET_Write(lhnetsocket_t *lhnetsocket, const void *content, int contentleng
                p->next->prev = p;
                p->prev->next = p;
 #ifndef STANDALONETEST
-               p->sentdoubletime = Sys_DoubleTime();
+               p->sentdoubletime = realtime;
 #endif
                value = contentlength;
        }