@@ -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