@@ -533,28 +533,39 @@ def list_devices(cls, **kwargs: Any) -> Iterable[IPv4TransportHandle]:
533533 # default values for multicast on HDX devices
534534 multicast_group = kwargs .get ("multicast_group" , "239.239.239.239" )
535535 multicast_port = kwargs .get ("multicast_port" , 57357 )
536- # Create the datagram (UDP) socket
537- sock = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
538- # allow other sockets to bind this port too
539- sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
540- # Set a timeout so the socket does not block
541- # indefinitely when trying to receive data.
542- sock .settimeout (kwargs .get ("multicast_timeout" , 1 ))
543- sock .setsockopt (
544- socket .IPPROTO_IP ,
545- socket .IP_MULTICAST_IF ,
546- socket .inet_aton (network_adapter ) if network_adapter else socket .INADDR_ANY ,
547- )
548- mreq = struct .pack (
549- "4sl" if not network_adapter else "4s4s" ,
550- socket .inet_aton (multicast_group ),
551- (
552- socket .INADDR_ANY
553- if not network_adapter
554- else socket .inet_aton (network_adapter )
555- ),
556- )
557- sock .setsockopt (socket .IPPROTO_IP , socket .IP_ADD_MEMBERSHIP , mreq )
536+ try :
537+ # Create the datagram (UDP) socket
538+ sock = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
539+ # allow other sockets to bind this port too
540+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
541+ # Set a timeout so the socket does not block
542+ # indefinitely when trying to receive data.
543+ sock .settimeout (kwargs .get ("multicast_timeout" , 1 ))
544+ sock .setsockopt (
545+ socket .IPPROTO_IP ,
546+ socket .IP_MULTICAST_IF ,
547+ (
548+ socket .inet_aton (network_adapter )
549+ if network_adapter
550+ else socket .INADDR_ANY
551+ ),
552+ )
553+ mreq = struct .pack (
554+ "4sl" if not network_adapter else "4s4s" ,
555+ socket .inet_aton (multicast_group ),
556+ (
557+ socket .INADDR_ANY
558+ if not network_adapter
559+ else socket .inet_aton (network_adapter )
560+ ),
561+ )
562+ sock .setsockopt (socket .IPPROTO_IP , socket .IP_ADD_MEMBERSHIP , mreq )
563+ except OSError as e :
564+ warnings .warn (
565+ f"Received { type (e ).__name__ } with '{ str (e )} '. Skipping IPv4 discovery." ,
566+ stacklevel = 2 ,
567+ )
568+ return
558569 # prepare a message requesting all devices in the multicast group
559570 # to send their (USB) product id
560571 transport = IPv4Transport (OBPProtocol )
0 commit comments