浏览代码

Disable AI_ADDRCONFIG if no IPv4/IPv6 address is configured for any interface

Tatsuhiro Tsujikawa 9 年之前
父节点
当前提交
295affe160
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      src/Context.cc

+ 7 - 3
src/Context.cc

@@ -219,14 +219,18 @@ Context::Context(bool standalone, int argc, char** argv, const KeyVals& options)
 
   if (op->getAsBool(PREF_DISABLE_IPV6)) {
     SocketCore::setProtocolFamily(AF_INET);
-    // Get rid of AI_ADDRCONFIG. It causes name resolution error
-    // when none of network interface has IPv4 address.
-    setDefaultAIFlags(0);
   }
   SocketCore::setIpDscp(op->getAsInt(PREF_DSCP));
   SocketCore::setSocketRecvBufferSize(
       op->getAsInt(PREF_SOCKET_RECV_BUFFER_SIZE));
   net::checkAddrconfig();
+
+  if (!net::getIPv4AddrConfigured() && !net::getIPv6AddrConfigured()) {
+    // Get rid of AI_ADDRCONFIG. It causes name resolution error when
+    // none of network interface has IPv4/v6 address.
+    setDefaultAIFlags(0);
+  }
+
   // Bind interface
   if (!op->get(PREF_INTERFACE).empty()) {
     std::string iface = op->get(PREF_INTERFACE);