Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
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 browsing the Monastery: (3)
As of 2015-04-02 03:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Who makes your decisions?







    Results (56 votes), past polls