Przeglądaj źródła

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 11 lat temu
rodzic
commit
f0473dc34d
1 zmienionych plików z 14 dodań i 6 usunięć
  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()