@@ -218,7 +218,7 @@ def new_socket(
218218 port : int = _MDNS_PORT ,
219219 ip_version : IPVersion = IPVersion .V4Only ,
220220 apple_p2p : bool = False ,
221- ) -> socket .socket :
221+ ) -> Optional [ socket .socket ] :
222222 log .debug (
223223 'Creating new socket with port %s, ip_version %s, apple_p2p %s and bind_addr %r' ,
224224 port ,
@@ -243,7 +243,17 @@ def new_socket(
243243 # https://opensource.apple.com/source/xnu/xnu-4570.41.2/bsd/sys/socket.h
244244 s .setsockopt (socket .SOL_SOCKET , 0x1104 , 1 )
245245
246- s .bind ((bind_addr [0 ], port , * bind_addr [1 :]))
246+ bind_tup = (bind_addr [0 ], port , * bind_addr [1 :])
247+ try :
248+ s .bind (bind_tup )
249+ except OSError as ex :
250+ if ex .errno == errno .EADDRNOTAVAIL :
251+ log .warning (
252+ 'Address not available when binding to %s, ' 'it is expected to happen on some systems' ,
253+ bind_tup ,
254+ )
255+ return None
256+ raise
247257 log .debug ('Created socket %s' , s )
248258 return s
249259
@@ -323,6 +333,8 @@ def new_respond_socket(
323333 apple_p2p = apple_p2p ,
324334 bind_addr = cast (Tuple [Tuple [str , int , int ], int ], interface )[0 ] if is_v6 else (cast (str , interface ),),
325335 )
336+ if not respond_socket :
337+ return None
326338 log .debug ('Configuring socket %s with multicast interface %s' , respond_socket , interface )
327339 if is_v6 :
328340 iface_bin = struct .pack ('@I' , cast (int , interface [1 ]))
0 commit comments