diff options
author | Maximilian Hils <git@maximilianhils.com> | 2019-11-19 18:32:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-19 18:32:29 +0100 |
commit | b9f3a310a70679531631661195fbdb5a3073c40c (patch) | |
tree | 98c369613a7ef76e8a3797b8d1f3589fd13a19e5 | |
parent | e92b957e3a7324d79f2ef2a7386ed21549a5cb10 (diff) | |
parent | 1ada2e26e81916409261ddb476e520e364b1d3be (diff) | |
download | mitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.tar.gz mitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.tar.bz2 mitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.zip |
Merge pull request #3714 from sethb157/ipv6_only
Add support for IPv6-only environments
-rw-r--r-- | mitmproxy/net/tcp.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/mitmproxy/net/tcp.py b/mitmproxy/net/tcp.py index 2496d47c..07cee466 100644 --- a/mitmproxy/net/tcp.py +++ b/mitmproxy/net/tcp.py @@ -558,7 +558,7 @@ class TCPServer: self.socket = None try: - # First try to bind an IPv6 socket, with possible IPv4 if the OS supports it. + # First try to bind an IPv6 socket, attempting to enable IPv4 support if the OS supports it. # This allows us to accept connections for ::1 and 127.0.0.1 on the same socket. # Only works if self.address == "" self.socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) @@ -572,8 +572,20 @@ class TCPServer: self.socket = None if not self.socket: - # Binding to an IPv6 socket failed, lets fall back to IPv4. - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + # Binding to an IPv6 + IPv4 socket failed, lets fall back to IPv4 only. + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) + self.socket.bind(self.address) + except socket.error: + if self.socket: + self.socket.close() + self.socket = None + + if not self.socket: + # Binding to an IPv4 only socket failed, lets fall back to IPv6 only. + self.socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) self.socket.bind(self.address) |