Skip to content

Commit 69a4332

Browse files
committed
wsgi server: allow binding to ipv6 address
Reproduce the fix in python3.8 http.server by doing a dns lookup and using the correct address family Fixes #567 Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
1 parent ecb5dd9 commit 69a4332

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

prometheus_client/exposition.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,19 @@ class ThreadingWSGIServer(ThreadingMixIn, WSGIServer):
138138
daemon_threads = True
139139

140140

141-
def start_wsgi_server(port, addr='', registry=REGISTRY):
141+
def _get_best_family(address, port):
142+
infos = socket.getaddrinfo(address, port)
143+
family, _, _, _, sockaddr = next(iter(infos))
144+
return family, sockaddr[0]
145+
146+
147+
def start_wsgi_server(port, addr='0.0.0.0', registry=REGISTRY):
142148
"""Starts a WSGI server for prometheus metrics as a daemon thread."""
149+
class TmpServer(ThreadingWSGIServer):
150+
"""Copy of ThreadingWSGIServer to update address_family locally"""
151+
TmpServer.address_family, addr = _get_best_family(addr, port)
143152
app = make_wsgi_app(registry)
144-
httpd = make_server(addr, port, app, ThreadingWSGIServer, handler_class=_SilentHandler)
153+
httpd = make_server(addr, port, app, TmpServer, handler_class=_SilentHandler)
145154
t = threading.Thread(target=httpd.serve_forever)
146155
t.daemon = True
147156
t.start()

0 commit comments

Comments
 (0)