소스 검색

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 년 전
부모
커밋
f0473dc34d
1개의 변경된 파일14개의 추가작업 그리고 6개의 파일을 삭제
  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()