Procházet zdrojové kódy

Ignore error when setting DSCP value

Setting DSCP is additional feature and failure to enable it should not
abort download entirely.  This change fixes the bug that windows build
does not perform bittorrent downloads.
Tatsuhiro Tsujikawa před 11 roky
rodič
revize
f0473dc34d
1 změnil soubory, kde provedl 14 přidání a 6 odebrání
  1. 14 6
      src/SocketCore.cc

+ 14 - 6
src/SocketCore.cc

@@ -535,15 +535,23 @@ void SocketCore::setTcpNodelay(bool f)
 
 void SocketCore::applyIpDscp()
 {
-  int family = getAddressFamily();
-  if(family == AF_INET) {
-    setSockOpt(IPPROTO_IP, IP_TOS, &ipDscp_, sizeof(ipDscp_));
+  if(ipDscp_ == 0) {
+    return;
   }
+
+  try {
+    int family = getAddressFamily();
+    if(family == AF_INET) {
+      setSockOpt(IPPROTO_IP, IP_TOS, &ipDscp_, sizeof(ipDscp_));
+    }
 #if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-  else if(family == AF_INET6) {
-    setSockOpt(IPPROTO_IPV6, IPV6_TCLASS, &ipDscp_, sizeof(ipDscp_));
-  }
+    else if(family == AF_INET6) {
+      setSockOpt(IPPROTO_IPV6, IPV6_TCLASS, &ipDscp_, sizeof(ipDscp_));
+    }
 #endif
+  } catch(RecoverableException& e) {
+    A2_LOG_INFO_EX("Applying DSCP value failed", e);
+  }
 }
 
 void SocketCore::setNonBlockingMode()