aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/net
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2019-11-19 18:32:29 +0100
committerGitHub <noreply@github.com>2019-11-19 18:32:29 +0100
commitb9f3a310a70679531631661195fbdb5a3073c40c (patch)
tree98c369613a7ef76e8a3797b8d1f3589fd13a19e5 /mitmproxy/net
parente92b957e3a7324d79f2ef2a7386ed21549a5cb10 (diff)
parent1ada2e26e81916409261ddb476e520e364b1d3be (diff)
downloadmitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.tar.gz
mitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.tar.bz2
mitmproxy-b9f3a310a70679531631661195fbdb5a3073c40c.zip
Merge pull request #3714 from sethb157/ipv6_only
Add support for IPv6-only environments
Diffstat (limited to 'mitmproxy/net')
-rw-r--r--mitmproxy/net/tcp.py18
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)