in reply to Re: how to set socket recv timeout in architecture independent manner?
in thread how to set socket recv timeout in architecture independent manner?
Thanks Javafan. Using IO::Select is a good idea.
#!/usr/bin/perl -w # # udp client which sends a query, waits for timeout # seconds and prints response if obtained else cribs. # use strict; use IO::Socket; use IO::Select; my $srvhost = '10.1.1.111'; my $srvport = '3333'; my $client = new IO::Socket::INET( PeerAddr => $srvhost, PeerPort => $srvport, Proto => 'udp'); my $sel = new IO::Select($client); my @ready; my $sock; my $request = "e8aa9e somequery 123"; my $maxread = 1024; while (1) { if (! defined($client->send($request))) { die "failed to send req\n"; } print "sent $request\n\n"; @ready = $sel->can_read(5); if (! scalar(@ready)) { print "Response Timed out\n"; } else { $sock = $ready[0]; if (! sysread($ready[0], $response, $maxread)) { print "recv failed :$!\n"; } else { print "got response $response\n"; } } sleep 3; }
I don't need to do recv as I can read through sysread, and this being a server response I don't need to send back any replies - so I don't need recv for its capabilities of getting the remote host's information. I don't even need to be in blocking mode now - or do I?. Am I right in saying this?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: how to set socket recv timeout in architecture independent manner?
by JavaFan (Canon) on May 05, 2009 at 21:41 UTC | |
by saurabh.hirani (Beadle) on May 06, 2009 at 06:18 UTC |