ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/eg/listen
Revision: 1.1
Committed: Thu May 15 13:32:19 2008 UTC (16 years, 1 month ago) by elmex
Branch: MAIN
CVS Tags: rel-3_5
Log Message:
added Util::listen function and removed Socket class. updated the listen test and MANIFEST. And added example script for listening.

File Contents

# User Rev Content
1 elmex 1.1 #!/opt/perl/bin/perl
2     use strict;
3     use Socket;
4     use IO::Socket::INET;
5     use AnyEvent::Util;
6     use AnyEvent::Handle;
7    
8     my $cv = AnyEvent->condvar;
9    
10     my $sock = IO::Socket::INET->new (
11     Listen => 5, ReuseAddr => 1, LocalPort => 124,
12     ) or die "Couldn't make socket: $!\n";
13    
14     print "Listening on addres: " . $sock->sockhost . ", port: " . $sock->sockport . "\n";
15    
16     my $hdl;
17    
18     my $watchobj = AnyEvent::Util::listen ($sock, sub {
19     my ($clsock, $paddr) = @_;
20     my ($port, $addr) = sockaddr_in ($paddr);
21     $addr = inet_ntoa ($addr);
22     print "Got new client connection: $addr:$port\n";
23    
24     $hdl =
25     AnyEvent::Handle->new (
26     fh => $clsock,
27     on_eof => sub { print "client connection $addr:$port: eof\n" },
28     on_error => sub { print "Client connection error: $addr:$port: $!\n" }
29     );
30    
31     $hdl->push_write ("Hello!\015\012");
32    
33     $hdl->push_read_line (sub {
34     my (undef, $line) = @_;
35     print "Yay, got line: $line\n";
36     $hdl->push_write ("Bye\015\012");
37     $hdl->on_drain (sub { $hdl->fh->close; undef $hdl });
38     });
39    
40     }, sub {
41     warn "Got error on connect: $!\n";
42     $cv->broadcast;
43     }, 10);
44    
45     $cv->wait;