hgext/zeroconf/Zeroconf.py
changeset 34448 5385b76fd1fd
parent 28504 3c90090320ad
child 35629 31451f3f4b56
--- a/hgext/zeroconf/Zeroconf.py	Mon Oct 02 19:31:33 2017 -0700
+++ b/hgext/zeroconf/Zeroconf.py	Mon Oct 02 20:23:25 2017 -0700
@@ -80,6 +80,7 @@
 __email__ = "paul at scott dash murphy dot com"
 __version__ = "0.12"
 
+import errno
 import itertools
 import select
 import socket
@@ -937,7 +938,16 @@
         self.zeroconf.engine.addReader(self, self.zeroconf.socket)
 
     def handle_read(self):
-        data, (addr, port) = self.zeroconf.socket.recvfrom(_MAX_MSG_ABSOLUTE)
+        data = addr = port = None
+        sock = self.zeroconf.socket
+        try:
+            data, (addr, port) = sock.recvfrom(_MAX_MSG_ABSOLUTE)
+        except socket.error as e:
+            if e.errno == errno.EBADF:
+                # some other thread may close the socket
+                return
+            else:
+                raise
         self.data = data
         msg = DNSIncoming(data)
         if msg.isQuery():