Skip to content

Commit 72ddacf

Browse files
committed
Allow connecting to chromecast over IPv6
1 parent cb28757 commit 72ddacf

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

pychromecast/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import threading
1212
from typing import TYPE_CHECKING, Literal, cast, overload
1313
from uuid import UUID
14+
import socket
1415

1516
import zeroconf
1617

@@ -336,6 +337,7 @@ def __init__(
336337
retry_wait=retry_wait,
337338
services=cast_info.services,
338339
zconf=zconf,
340+
ip_family=socket.AF_INET6 if ':' in cast_info.host else socket.AF_INET,
339341
)
340342

341343
receiver_controller = self.socket_client.receiver_controller

pychromecast/socket_client.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ def __init__(
173173
retry_wait: float | None,
174174
services: set[HostServiceInfo | MDNSServiceInfo],
175175
zconf: zeroconf.Zeroconf | None,
176+
ip_family: socket.AddressFamily = socket.AF_INET,
176177
) -> None:
177178
super().__init__()
178179

@@ -192,6 +193,7 @@ def __init__(
192193

193194
self.host = "unknown"
194195
self.port = 8009
196+
self.ip_family = ip_family
195197

196198
self.source_id = "sender-0"
197199
self.stop = threading.Event()
@@ -291,7 +293,7 @@ def mdns_backoff(
291293
self.socket = None
292294
self.remote_selector_key = None
293295

294-
self.socket = new_socket()
296+
self.socket = new_socket(self.ip_family)
295297
self.remote_selector_key = self.selector.register(
296298
self.socket, selectors.EVENT_READ
297299
)
@@ -1085,14 +1087,14 @@ def receive_message(self, message: CastMessage, data: dict) -> bool:
10851087
return False
10861088

10871089

1088-
def new_socket() -> socket.socket:
1090+
def new_socket(family: socket.AddressFamily) -> socket.socket:
10891091
"""
10901092
Create a new socket with OS-specific parameters
10911093
10921094
Try to set SO_REUSEPORT for BSD-flavored systems if it's an option.
10931095
Catches errors if not.
10941096
"""
1095-
new_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1097+
new_sock = socket.socket(family, socket.SOCK_STREAM)
10961098
new_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
10971099

10981100
try:

0 commit comments

Comments
 (0)