Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Not able to timeout

by anshumangoyal (Scribe)
on Jul 17, 2012 at 12:12 UTC ( #982217=perlquestion: print w/ replies, xml ) Need Help??
anshumangoyal has asked for the wisdom of the Perl Monks concerning the following question:

I am using the following code. I want to timeout and close the connection after 20 seconds, tried with alarms but nothing worked. Here is my code:
my $socket_resp = IO::Socket::INET->new(Blocking => 0, LocalPort => $c +omm_port, Proto => 'udp', Timeout => 2); $socket_resp->setsockopt(SO_RCVTIMEO, SO_RCVTIMEO, 10); print "Waiting for Response On Port $comm_port\n"; while (my $recieved_data = $socket_resp->getline()) { chomp($recieved_data); print "$recieved_data\n"; if ($recieved_data =~ m/^done/i) { last; } } $socket_resp->close();
alarms, and nothing else has worked. Can any one help.

Comment on Not able to timeout
Download Code
Re: Not able to timeout
by zentara (Archbishop) on Jul 17, 2012 at 12:58 UTC
Re: Not able to timeout
by davido (Archbishop) on Jul 17, 2012 at 16:22 UTC

    I recently found success with Sys::SigAction, which facilitates alarm timeouts even in system calls that can prove to be stubborn at times.


    Dave

Re: Not able to timeout
by dolmen (Sexton) on Jul 18, 2012 at 14:40 UTC

    Once you begin to deal with I/O and timers, it's time to use a dedicated that will make your code more reliable, and easier to read and maintain.

    I strongly suggest AnyEvent.

    Try this (incompletely tested) code:

    use strict; use warnings; use AnyEvent; use AnyEvent::Handle::UDP; my $cv = AE::cv; my $comm_port = $ARGV[0] or die "missing port number"; my $server = AnyEvent::Handle::UDP->new( bind => [ localhost => $comm_port ], on_recv => sub { my ($datagram, $handle, $addr) = @_; if ($datagram =~ /^done/i) { $cv->send; } else { print $datagram; } }, rtimeout => 10, on_rtimeout => sub { warn "Timeout!\n"; $cv->send +} ); print "Waiting for Response On Port $comm_port\n"; $cv->recv;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://982217]
Front-paged by NetWallah
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (10)
As of 2014-12-26 12:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (171 votes), past polls