]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - lhnet.c
Revert "Try using incoming-stack-boundary=2 instead of stackrealign."
[xonotic/darkplaces.git] / lhnet.c
diff --git a/lhnet.c b/lhnet.c
index cb87b6d319e2ae866f94ca9bf11d1856120aa9cd..e3bc6b712186f54dd511fd4165ddfc2f54fa3c88 100644 (file)
--- a/lhnet.c
+++ b/lhnet.c
@@ -154,7 +154,7 @@ int LHNETADDRESS_FromPort(lhnetaddress_t *vaddress, lhnetaddresstype_t addressty
 }
 
 #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;
@@ -723,6 +723,7 @@ lhnetpacket_t;
 static int lhnet_active;
 static lhnetsocket_t lhnet_socketlist;
 static lhnetpacket_t lhnet_packetlist;
+static int lhnet_default_dscp = 0;
 #ifdef WIN32
 static int lhnet_didWSAStartup = 0;
 static WSADATA lhnet_winsockdata;
@@ -742,6 +743,18 @@ void LHNET_Init(void)
 #endif
 }
 
+int LHNET_DefaultDSCP(int dscp)
+{
+#ifdef IP_TOS
+       int prev = lhnet_default_dscp;
+       if(dscp >= 0)
+               lhnet_default_dscp = dscp;
+       return prev;
+#else
+       return -1;
+#endif
+}
+
 void LHNET_Shutdown(void)
 {
        lhnetpacket_t *p;
@@ -945,6 +958,20 @@ lhnetsocket_t *LHNET_OpenSocket_Connectionless(lhnetaddress_t *address)
                                                        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)
                                                        {
@@ -966,6 +993,13 @@ lhnetsocket_t *LHNET_OpenSocket_Connectionless(lhnetaddress_t *address)
                                                                int i = 1;
                                                                // enable broadcast on this socket
                                                                setsockopt(lhnetsocket->inetsocket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i));
+#ifdef IP_TOS
+                                                               {
+                                                                       // enable DSCP for ToS support
+                                                                       int tos = lhnet_default_dscp << 2;
+                                                                       setsockopt(lhnetsocket->inetsocket, IPPROTO_IP, IP_TOS, (char *) &tos, sizeof(tos));
+                                                               }
+#endif
                                                                lhnetsocket->next = &lhnet_socketlist;
                                                                lhnetsocket->prev = lhnetsocket->next->prev;
                                                                lhnetsocket->next->prev = lhnetsocket;