diff options
Diffstat (limited to 'adb/sysdeps/posix/network.cpp')
-rw-r--r-- | adb/sysdeps/posix/network.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/adb/sysdeps/posix/network.cpp b/adb/sysdeps/posix/network.cpp index c5c227568..a4d9013d3 100644 --- a/adb/sysdeps/posix/network.cpp +++ b/adb/sysdeps/posix/network.cpp @@ -119,12 +119,15 @@ static int _network_loopback_server(bool ipv6, int port, int type, std::string* return s.release(); } -int network_loopback_server(int port, int type, std::string* error) { - int rc = _network_loopback_server(false, port, type, error); +int network_loopback_server(int port, int type, std::string* error, bool prefer_ipv4) { + int rc = -1; + if (prefer_ipv4) { + rc = _network_loopback_server(false, port, type, error); + } - // Only attempt to listen on IPv6 if IPv4 is unavailable. + // Only attempt to listen on IPv6 if IPv4 is unavailable or prefer_ipv4 is false // We don't want to start an IPv6 server if there's already an IPv4 one running. - if (rc == -1 && (errno == EADDRNOTAVAIL || errno == EAFNOSUPPORT)) { + if (rc == -1 && (errno == EADDRNOTAVAIL || errno == EAFNOSUPPORT || !prefer_ipv4)) { return _network_loopback_server(true, port, type, error); } return rc; |