in reply to Waiting for an event
Using IO::Select is much more convenient since it does the bit-vector works behind the curtain, as well as its nice OO interface.#!/usr/bin/perl -w use IO::Socket; $|++; my $client = IO::Socket::INET->new( PeerAddr => 'www.satunet.com', PeerPort => 80, Proto => 'tcp',) or die "Can't connect: $!"; $rin = $rout = $win = $wout = ''; vec($rin, $client->fileno, 1) = 1; vec($win, $client->fileno, 1) = 1; while (1) { if (select($rout = $rin, $wout = $win, undef, 5) > 0) { if (vec($rout, $client->fileno, 1)) { while (<$client>) { print "Client read: $_" } $client->close; } elsif (vec($wout, $client->fileno, 1)) { print $client "HEAD / HTTP/1.0\r\n\r\n"; } } else { exit } }
POE is also good, but it requires you to have some basic knowledge about state machine, otherwise its programming style may be confusing. I'd recommend using JPRIT's Event module if you want to explore the full power of event-driven programming.
|
---|