From 60a1ff0fc05b8219b507145ba5a2dabe96a7b971 Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 19 May 2023 16:37:52 +0200 Subject: [PATCH] macos: mute select() noise on wake from suspend --- copyparty/mdns.py | 15 +++++++++++++-- copyparty/ssdp.py | 14 ++++++++++++-- copyparty/util.py | 2 ++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/copyparty/mdns.py b/copyparty/mdns.py index ba2bfc98..71c1cd53 100644 --- a/copyparty/mdns.py +++ b/copyparty/mdns.py @@ -1,6 +1,7 @@ # coding: utf-8 from __future__ import print_function, unicode_literals +import errno import random import select import socket @@ -277,6 +278,18 @@ class MDNS(MCast): zf = time.time() + 2 self.probing = zf # cant unicast so give everyone an extra sec self.unsolicited = [zf, zf + 1, zf + 3, zf + 7] # rfc-8.3 + + try: + self.run2() + except OSError as ex: + if ex.errno != errno.EBADF: + raise + + self.log("stopping due to {}".format(ex), "90") + + self.log("stopped", 2) + + def run2(self) -> None: last_hop = time.time() ihop = self.args.mc_hop while self.running: @@ -314,8 +327,6 @@ class MDNS(MCast): self.log(t.format(self.hn[:-1]), 2) self.probing = 0 - self.log("stopped", 2) - def stop(self, panic=False) -> None: self.running = False for srv in self.srv.values(): diff --git a/copyparty/ssdp.py b/copyparty/ssdp.py index 1346802c..985bc293 100644 --- a/copyparty/ssdp.py +++ b/copyparty/ssdp.py @@ -1,6 +1,7 @@ # coding: utf-8 from __future__ import print_function, unicode_literals +import errno import re import select import socket @@ -129,6 +130,17 @@ class SSDPd(MCast): srv.hport = hp self.log("listening") + try: + self.run2() + except OSError as ex: + if ex.errno != errno.EBADF: + raise + + self.log("stopping due to {}".format(ex), "90") + + self.log("stopped", 2) + + def run2(self) -> None: while self.running: rdy = select.select(self.srv, [], [], self.args.z_chk or 180) rx: list[socket.socket] = rdy[0] # type: ignore @@ -148,8 +160,6 @@ class SSDPd(MCast): ) self.log(t, 6) - self.log("stopped", 2) - def stop(self) -> None: self.running = False for srv in self.srv.values(): diff --git a/copyparty/util.py b/copyparty/util.py index b6fd6e92..bef44165 100644 --- a/copyparty/util.py +++ b/copyparty/util.py @@ -2019,6 +2019,8 @@ def shut_socket(log: "NamedLogger", sck: socket.socket, timeout: int = 3) -> Non sck.shutdown(socket.SHUT_RDWR) except: pass + except Exception as ex: + log("shut({}): {}".format(fd, ex), "90") finally: td = time.time() - t0 if td >= 1: