Ich habe einen Socket wie diesen in Perl in einem Daemon erstellt
IO::Socket::INET->new(LocalPort => $port,
Proto => 'udp',Blocking => '0') or die "socket: $@";
auf einem Linux-Rechner
Der Socket verhält sich während eines recv-Aufrufs erwartungsgemäß wie ein nicht blockierender Socket $sock->recv($message, 128);
.
Ich beobachte jedoch immer wieder, dass, wenn die VIFs auf eth0 neu konfiguriert werden, während der Daemon läuft und Daten empfängt, der recv-Aufruf zu blockieren beginnt.
Dies ist ein sehr verwirrendes Thema. Ich habe $sock->recv($message, 128, MSG_DONTWAIT);
und der recv-Aufruf wird nicht mehr blockiert.
Ich habe gegoogelt, konnte aber nicht herausfinden, welche Methode für die Verwendung von nicht blockierenden UDP-Sockets vorgeschlagen wird.