hi,
ich möchte auf ein gesendetes UDP Paket eines empfangen...
wenn aber mein 1. Paket nicht ankommt bleibt das script ja logischerweise stehen...
nun habe ich versucht mit mit SIGALRM eine kleine time out Funktion zu schreiben, nur leider haut das nicht so ganz hin.
ich habe das ganze in einer while-schleife und möchte das er diese insofern er keine Antwort bekommt noch einmal von Anfang an durchläuft (daher das next).
eval {
local $SIG{ALRM} = sub { next "timeout" };
alarm(20);
eval{
$portaddr = recv(SOCKET, $id, 10000, 0) or next "recv: $!";
($port, $ipaddr) = sockaddr_in($portaddr);
my $host = gethostbyaddr($ipaddr, AF_INET);
};
alarm(0);
};
alarm(0);
next if $@ && $@ !~ /timeout/;
da gibt er mit den Fehler
Exiting eval via next at test.pl line 33.
aus.
was kann ich daran verändern damit es läuft?