From: Christopher Dykes Date: Tue, 22 Nov 2016 17:48:18 +0000 (-0800) Subject: Correctly bind to the wildcard address in AsyncServerSocket::bind X-Git-Tag: v2016.11.28.00~12 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=e2a71713a035811615dc8178d598b052b067e015;p=folly.git Correctly bind to the wildcard address in AsyncServerSocket::bind Summary: Because Windows disagrees with everything else about how to specify that you want the wildcard address. It's done with an empty string on Windows, but `nullptr` everywhere else. Reviewed By: yfeldblum Differential Revision: D4216970 fbshipit-source-id: b5dc136946d9677a96be3252e44d383a6abca800 --- diff --git a/folly/io/async/AsyncServerSocket.cpp b/folly/io/async/AsyncServerSocket.cpp index 65d4c5c4..3ad284c8 100644 --- a/folly/io/async/AsyncServerSocket.cpp +++ b/folly/io/async/AsyncServerSocket.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -370,7 +371,10 @@ void AsyncServerSocket::bind(uint16_t port) { hints.ai_flags = AI_PASSIVE | AI_NUMERICSERV; snprintf(sport, sizeof(sport), "%u", port); - if (getaddrinfo(nullptr, sport, &hints, &res0)) { + // On Windows the value we need to pass to bind to all available + // addresses is an empty string. Everywhere else, it's nullptr. + constexpr const char* kWildcardNode = kIsWindows ? "" : nullptr; + if (getaddrinfo(kWildcardNode, sport, &hints, &res0)) { throw std::invalid_argument( "Attempted to bind address to socket with " "bad getaddrinfo");