Revert "folly: AsyncServerSocket::getAddress: prefer IPv6"
authorTao Chen <taochen@fb.com>
Tue, 23 Dec 2014 22:49:20 +0000 (14:49 -0800)
committerDave Watson <davejwatson@fb.com>
Mon, 29 Dec 2014 18:40:22 +0000 (10:40 -0800)
Summary: This reverts commit fc83e983e2376bccc80dc4b21890e3a41dbc211f.

Test Plan: none

Reviewed By: lucian@fb.com, robot9@fb.com

Subscribers: ps, bmatheny, folly-diffs@

FB internal diff: D1756753

Tasks: 58838945886688

Signature: t1:1756753:1419374764:977160379cfa49530babb38022b9d4cc80573a7d

folly/io/async/AsyncServerSocket.cpp

index ba0b925d2f775a08dfbf979dd34e5d73803c311d..ea2a46d9025a282e723b74137c8f584d66711467 100644 (file)
@@ -365,13 +365,13 @@ void AsyncServerSocket::bind(uint16_t port) {
     });
   DCHECK(&guard);
 
-  auto setupAddress = [&] (struct addrinfo* res) {
+  for (res = res0; res; res = res->ai_next) {
     int s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
     // IPv6/IPv4 may not be supported by the kernel
     if (s < 0 && errno == EAFNOSUPPORT) {
-      return;
+      continue;
     }
-    CHECK_GE(s, 0);
+    CHECK(s);
 
     try {
       setupSocket(s);
@@ -398,26 +398,7 @@ void AsyncServerSocket::bind(uint16_t port) {
         errno,
         "failed to bind to async server socket for port");
     }
-  };
-
-  // Prefer AF_INET6 addresses. RFC 3484 mandates that getaddrinfo
-  // should return IPv6 first and then IPv4 addresses, but glibc's
-  // getaddrinfo(nullptr) with AI_PASSIVE returns:
-  // - 0.0.0.0 (IPv4-only)
-  // - :: (IPv6+IPv4) in this order
-  // See: https://sourceware.org/bugzilla/show_bug.cgi?id=9981
-  for (res = res0; res; res = res->ai_next) {
-    if (res->ai_family == AF_INET6) {
-      setupAddress(res);
-    }
   }
-
-  for (res = res0; res; res = res->ai_next) {
-    if (res->ai_family != AF_INET6) {
-      setupAddress(res);
-    }
-  }
-
   if (sockets_.size() == 0) {
     throw std::runtime_error(
         "did not bind any async server socket for port");
@@ -438,10 +419,10 @@ void AsyncServerSocket::listen(int backlog) {
 
 void AsyncServerSocket::getAddress(SocketAddress* addressReturn) const {
   CHECK(sockets_.size() >= 1);
-  VLOG_IF(2, sockets_.size() > 1)
-    << "Warning: getAddress() called and multiple addresses available ("
-    << sockets_.size() << "). Returning only the first one.";
-
+  if (sockets_.size() > 1) {
+    VLOG(2) << "Warning: getAddress can return multiple addresses, " <<
+      "but getAddress was called, so only returning the first";
+  }
   addressReturn->setFromLocalAddress(sockets_[0].socket_);
 }