ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/eg/connect
Revision: 1.1
Committed: Thu May 15 08:37:55 2008 UTC (16 years, 1 month ago) by elmex
Branch: MAIN
CVS Tags: rel-3_5
Log Message:
implemented non-blocking connects in a different manner than ::Socket.

File Contents

# Content
1 #!/opt/perl/bin/perl
2 use IO::Socket::INET;
3 use AnyEvent::Util;
4 use AnyEvent::Handle;
5
6 my $cv = AnyEvent->condvar;
7
8 # Warning: IO::Socket::INET is going to do a BLOCKING
9 # DNS lookup. Please see AnyEvent::Util::inet_aton how to
10 # do nonblocking lookups!
11 my $sock = IO::Socket::INET->new (
12 PeerAddr => "www.google.com:80",
13 Blocking => 0,
14 ) or die "Couldn't make socket: $!\n";
15
16 my $hdl;
17
18 # The $watchobj is just a guard that you have to keep
19 # referenced until you are done with the connect.
20 my $watchobj = AnyEvent::Util::connect ($sock, sub {
21 my ($sock) = @_;
22
23 $hdl =
24 AnyEvent::Handle->new (
25 fh => $sock,
26 on_eof => sub { print "received eof\n"; undef $hdl }
27 );
28
29 $hdl->push_write ("GET / HTTP/1.0\015\012\015\012");
30
31 $hdl->push_read_line (sub {
32 my ($hdl, $line) = @_;
33 print "Yay, got line: $line\n";
34 $cv->broadcast;
35 });
36
37 }, sub {
38 warn "Got error on connect: $!\n";
39 $cv->broadcast;
40 }, 10);
41
42 $cv->wait;