From c573a780e98f9ae960008fd756af5e65912d9969 Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 3 Dec 2022 16:37:14 +0000 Subject: [PATCH] some failsafes --- copyparty/multicast.py | 10 +++++++++- copyparty/tcpsrv.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/copyparty/multicast.py b/copyparty/multicast.py index 3d4e4fe4..cab9fb5d 100644 --- a/copyparty/multicast.py +++ b/copyparty/multicast.py @@ -8,7 +8,7 @@ import ipaddress from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network from .__init__ import TYPE_CHECKING -from .util import Netdev, min_ex, spack +from .util import MACOS, Netdev, min_ex, spack if TYPE_CHECKING: from .svchub import SvcHub @@ -216,6 +216,9 @@ class MCast(object): grp = self.grp6 if srv.idx else "" try: + if MACOS: + raise Exception() + sck.bind((grp, self.port, 0, srv.idx)) except: sck.bind(("", self.port, 0, srv.idx)) @@ -243,6 +246,9 @@ class MCast(object): grp = self.grp4 if srv.idx else "" try: + if MACOS: + raise Exception() + sck.bind((grp, self.port)) except: sck.bind(("", self.port)) @@ -289,6 +295,8 @@ class MCast(object): except: pass + # t = "joining {} from ip {} idx {} with mreq {}" + # self.log(t.format(srv.grp, srv.ip, srv.idx, repr(srv.mreq)), 6) sck.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, req) def map_client(self, cip: str) -> Optional[MC_Sck]: diff --git a/copyparty/tcpsrv.py b/copyparty/tcpsrv.py index 655fcacf..f000be15 100644 --- a/copyparty/tcpsrv.py +++ b/copyparty/tcpsrv.py @@ -280,7 +280,16 @@ class TcpSrv(object): # browsers dont impl linklocal continue - eps[sip] = Netdev(sip, nic.index or 0, nic.nice_name, "") + nd = Netdev(sip, nic.index or 0, nic.nice_name, "") + eps[sip] = nd + try: + idx = socket.if_nametoindex(nd.name) + if idx and idx != nd.idx: + t = "netdev idx mismatch; ifaddr={} cpython={}" + self.log("tcpsrv", t.format(nd.idx, idx), 3) + nd.idx = idx + except: + pass if "0.0.0.0" not in listen_ips and "::" not in listen_ips: eps = {k: v for k, v in eps.items() if k.split("/")[0] in listen_ips}