@@ -1239,17 +1239,19 @@ def __init__(self, bindaddress=None):
1239
1239
log .debug ('Bind address is %r' % (self .intf ,))
1240
1240
self .group = ('' , _MDNS_PORT )
1241
1241
self .socket = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
1242
+ self .socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
1243
+
1244
+ # SO_REUSEADDR should be equivalent to SO_REUSEPORT for
1245
+ # multicast UDP sockets (p 731, "TCP/IP Illustrated,
1246
+ # Volume 2"), but some BSD-derived systems require
1247
+ # SO_REUSEPORT to be specified explicity. Also, not all
1248
+ # versions of Python have SO_REUSEPORT available.
1242
1249
try :
1243
- self .socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
1244
- self .socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEPORT , 1 )
1245
- except Exception as e : # TODO stop catching all Exceptions
1246
- # SO_REUSEADDR should be equivalent to SO_REUSEPORT for
1247
- # multicast UDP sockets (p 731, "TCP/IP Illustrated,
1248
- # Volume 2"), but some BSD-derived systems require
1249
- # SO_REUSEPORT to be specified explicity. Also, not all
1250
- # versions of Python have SO_REUSEPORT available.
1251
- #
1252
- log .exception ('Unknown error, possibly benign: %r' , e )
1250
+ reuseport = socket .SO_REUSEPORT
1251
+ except AttributeError :
1252
+ pass
1253
+ else :
1254
+ self .socket .setsockopt (socket .SOL_SOCKET , reuseport , 1 )
1253
1255
1254
1256
self .socket .setsockopt (socket .IPPROTO_IP , socket .IP_MULTICAST_TTL , 255 )
1255
1257
self .socket .setsockopt (socket .IPPROTO_IP , socket .IP_MULTICAST_LOOP , 1 )
0 commit comments