Skip to content

Commit 026167a

Browse files
committed
refactor: extract _normalize_sockaddr utility function
Consolidate the repeated pattern for normalizing socket addresses to ASGI-compatible (host, port) tuples into a single utility function.
1 parent e780508 commit 026167a

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

gunicorn/asgi/protocol.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@
2020
from gunicorn.uwsgi.errors import UWSGIParseException
2121

2222

23+
def _normalize_sockaddr(sockaddr):
24+
"""Normalize socket address to ASGI-compatible (host, port) tuple.
25+
26+
ASGI spec requires server/client to be (host, port) tuples.
27+
IPv6 sockets return 4-tuples (host, port, flowinfo, scope_id),
28+
so we extract just the first two elements.
29+
"""
30+
return tuple(sockaddr[:2]) if sockaddr else None
31+
32+
2333
class ASGIResponseInfo:
2434
"""Simple container for ASGI response info for access logging."""
2535

@@ -438,11 +448,8 @@ def _build_http_scope(self, request, sockname, peername):
438448
for name, value in request.headers:
439449
headers.append((name.lower().encode("latin-1"), value.encode("latin-1")))
440450

441-
# ASGI spec requires server/client to be (host, port) tuples
442-
# IPv6 sockname/peername can be 4-tuples (host, port, flowinfo, scope_id)
443-
# so we extract just the first two elements
444-
server = tuple(sockname[:2]) if sockname else None
445-
client = tuple(peername[:2]) if peername else None
451+
server = _normalize_sockaddr(sockname)
452+
client = _normalize_sockaddr(peername)
446453

447454
scope = {
448455
"type": "http",
@@ -506,9 +513,8 @@ def _build_websocket_scope(self, request, sockname, peername):
506513
subprotocols = [s.strip() for s in value.split(",")]
507514
break
508515

509-
# ASGI spec requires server/client to be (host, port) tuples
510-
server = tuple(sockname[:2]) if sockname else None
511-
client = tuple(peername[:2]) if peername else None
516+
server = _normalize_sockaddr(sockname)
517+
client = _normalize_sockaddr(peername)
512518

513519
scope = {
514520
"type": "websocket",
@@ -889,9 +895,8 @@ def _build_http2_scope(self, request, sockname, peername):
889895
value.encode("latin-1")
890896
))
891897

892-
# ASGI spec requires server/client to be (host, port) tuples
893-
server = tuple(sockname[:2]) if sockname else None
894-
client = tuple(peername[:2]) if peername else None
898+
server = _normalize_sockaddr(sockname)
899+
client = _normalize_sockaddr(peername)
895900

896901
scope = {
897902
"type": "http",

0 commit comments

Comments
 (0)