SocketAddress::anyAddress should be a method
authorSean Cannella <seanc@fb.com>
Wed, 18 Mar 2015 22:57:53 +0000 (15:57 -0700)
committerNoam Lerner <noamler@fb.com>
Wed, 25 Mar 2015 22:33:34 +0000 (15:33 -0700)
Summary:
Calling getaddrinfo from a static constructor is not the most
reliable thing to do. Stop doing it.

Test Plan: existing tests

Reviewed By: davejwatson@fb.com

Subscribers: dancol, mzlee, shikong, kmdent, fma, bmatheny, benyluo, ranjeeth, folly-diffs@, jsedgwick, yfeldblum

FB internal diff: D1924578

Tasks: 6534662

Signature: t1:1924578:1426718586:d73bc2f001095e66fa77fde9c027af050cc26d2a

folly/io/async/AsyncSSLSocket.h
folly/io/async/AsyncSocket.cpp
folly/io/async/AsyncSocket.h

index 9750de4ef5e3eb91f122b3b232c57dc45771428f..c3d52150a3b21aebcbf4327092f964c3fc2d27fe 100644 (file)
@@ -308,7 +308,7 @@ class AsyncSSLSocket : public virtual AsyncSocket {
                const folly::SocketAddress& address,
                int timeout = 0,
                const OptionMap &options = emptyOptionMap,
-               const folly::SocketAddress& bindAddr = anyAddress)
+               const folly::SocketAddress& bindAddr = anyAddress())
                noexcept override;
 
   using AsyncSocket::connect;
index f4f0838740ea91a1fab60f312f4614af06d634e0..01ed6621daec89784613477081b997f61fc2945f 100644 (file)
@@ -37,8 +37,6 @@ namespace folly {
 
 // static members initializers
 const AsyncSocket::OptionMap AsyncSocket::emptyOptionMap;
-const folly::SocketAddress AsyncSocket::anyAddress =
-  folly::SocketAddress("0.0.0.0", 0);
 
 const AsyncSocketException socketClosedLocallyEx(
     AsyncSocketException::END_OF_FILE, "socket closed locally");
@@ -273,6 +271,12 @@ int AsyncSocket::detachFd() {
   return fd;
 }
 
+const folly::SocketAddress& AsyncSocket::anyAddress() {
+  static const folly::SocketAddress anyAddress =
+    folly::SocketAddress("0.0.0.0", 0);
+  return anyAddress;
+}
+
 void AsyncSocket::setShutdownSocketSet(ShutdownSocketSet* newSS) {
   if (shutdownSocketSet_ == newSS) {
     return;
@@ -371,7 +375,7 @@ void AsyncSocket::connect(ConnectCallback* callback,
             << ", fd=" << fd_ << ", host=" << address.describe().c_str();
 
     // bind the socket
-    if (bindAddr != anyAddress) {
+    if (bindAddr != anyAddress()) {
       int one = 1;
       if (::setsockopt(fd_, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) {
         doClose();
index 1973d3d84e5cbefef88fa121809afaa91cace124..e6209166b749e46f9007513d29ed97f8b42a248e 100644 (file)
@@ -238,7 +238,7 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
   typedef std::map<OptionKey, int> OptionMap;
 
   static const OptionMap emptyOptionMap;
-  static const folly::SocketAddress anyAddress;
+  static const folly::SocketAddress& anyAddress();
 
   /**
    * Initiate a connection.
@@ -254,7 +254,7 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
                const folly::SocketAddress& address,
                int timeout = 0,
                const OptionMap &options = emptyOptionMap,
-               const folly::SocketAddress& bindAddr = anyAddress
+               const folly::SocketAddress& bindAddr = anyAddress()
                ) noexcept;
   void connect(ConnectCallback* callback, const std::string& ip, uint16_t port,
                int timeout = 00,