From e2a71713a035811615dc8178d598b052b067e015 Mon Sep 17 00:00:00 2001 From: Christopher Dykes Date: Tue, 22 Nov 2016 09:48:18 -0800 Subject: [PATCH] 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 --- folly/io/async/AsyncServerSocket.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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"); -- 2.34.1