Skip to content

Commit 91d3187

Browse files
committed
python 3.13: be compatible with socket ipv6 changes.
1 parent d51681b commit 91d3187

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/remote_registration.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@
1414
import prefs
1515
import config
1616

17+
def get_ipv6_addr_tuple(addr, port):
18+
if '%' in addr:
19+
ip_part, scope_name = addr.split('%', 1)
20+
scope_id = socket.if_nametoindex(scope_name)
21+
else:
22+
ip_part = addr
23+
scope_id = 0
24+
return (ip_part, port, 0, scope_id)
25+
1726
class RegRequest():
1827
def __init__(self, ident, hostname, ip_info, port, auth_port, api_version):
1928
self.api_version = api_version
@@ -182,7 +191,10 @@ def serve_cert_thread(self, ip_version):
182191
try:
183192
server_sock = socket.socket(ip_version, socket.SOCK_DGRAM)
184193
server_sock.settimeout(1.0)
185-
server_sock.bind((local_ip, self.port))
194+
if ip_version == socket.AF_INET6:
195+
server_sock.bind(get_ipv6_addr_tuple(local_ip, self.port))
196+
else:
197+
server_sock.bind((local_ip, self.port))
186198
except socket.error as e:
187199
logging.critical("Could not create udp socket for cert requests: %s" % str(e))
188200
return

src/util.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,9 @@ def as_binary_list(self):
243243
pass
244244
if self.ip6:
245245
try:
246-
blist.append(socket.inet_pton(GLib.SYSDEF_AF_INET6, self.ip6_address))
246+
# Strip scope ID suffix if present (e.g., %eth0)
247+
ip6_clean = self.ip6_address.split('%')[0] if '%' in self.ip6_address else self.ip6_address
248+
blist.append(socket.inet_pton(GLib.SYSDEF_AF_INET6, ip6_clean))
247249
except:
248250
pass
249251

0 commit comments

Comments
 (0)