ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/handle/04_listen.t
(Generate patch)

Comparing AnyEvent/t/handle/04_listen.t (file contents):
Revision 1.6 by elmex, Fri May 2 09:15:34 2008 UTC vs.
Revision 1.8 by elmex, Thu May 15 13:50:23 2008 UTC

1#!/opt/perl/bin/perl 1#!/opt/perl/bin/perl
2
3use strict; 2use strict;
4use Test::More tests => 2;
5use AnyEvent::Impl::Perl; 3use AnyEvent::Impl::Perl;
4use AnyEvent::Handle;
6use AnyEvent; 5use AnyEvent::Util;
7use AnyEvent::Socket; 6use IO::Socket::INET;
8 7
9my $lbytes; 8my $lbytes;
10my $rbytes; 9my $rbytes;
11 10
11print "1..2\n";
12
12my $cv = AnyEvent->condvar; 13my $cv = AnyEvent->condvar;
13 14
14my $lsock = 15my $sock = IO::Socket::INET->new (
15 AnyEvent::Socket->new ( 16 Listen => 5, ReuseAddr => 1, LocalAddr => 'localhost',
16 Listen => 1, 17) or die "Couldn't make socket: $!\n";
17 ReuseAddr => 1,
18 );
19 18
20$lsock->on_accept (sub { 19my $hdl;
21 my ($lsock, $cl, $paddr) = @_;
22 20
23 unless (defined $cl) { 21my $w = AnyEvent::Util::listen ($sock, sub {
24 diag "accept failed: $!"; 22 my ($cl, $claddr) = @_;
25 return; 23 $hdl = AnyEvent::Handle->new (fh => $cl, on_eof => sub { $cv->broadcast });
26 }
27 24
28 $cl->read (6, sub { 25 $hdl->push_read_chunk (6, sub {
29 my ($cl, $data) = @_; 26 my ($hdl, $data) = @_;
30 $lbytes = $data; 27
28 if ($data eq "TEST\015\012") {
29 print "ok 1 - server received client data\n";
30 } else {
31 print "not ok 1 - server received bad client data\n";
32 }
33
31 $cl->write ("BLABLABLA\015\012"); 34 $hdl->push_write ("BLABLABLA\015\012");
32 }); 35 });
36
37}, sub {
38 warn "error on accept: $!";
39 $cv->broadcast;
33}); 40});
34 41
35my $ae_sock = 42my $clhdl;
36 AnyEvent::Socket->new ( 43my $wc = AnyEvent::Util::tcp_connect ($sock->sockhost, $sock->sockport, sub {
37 PeerAddr => "127.0.0.1:" . $lsock->fh->sockport, 44 my ($clsock) = @_;
38 on_connect => sub { 45 $clhdl = AnyEvent::Handle->new (fh => $clsock, on_eof => sub { $cv->broadcast });
39 my ($ae_sock, $error) = @_;
40 if ($error) { diag "connection failed: $!"; $cv->broadcast; return }
41 46
42 print "connected to ".$ae_sock->fh->peerhost.":".$ae_sock->fh->peerport."\n"; 47 $clhdl->push_write ("TEST\015\012");
48 $clhdl->push_read_line (sub {
49 my ($clhdl, $line) = @_;
43 50
44 $ae_sock->on_read (sub { 51 if ($line eq 'BLABLABLA') {
45 my ($ae_sock) = @_; 52 print "ok 2 - client received response\n";
46 $rbytes = $ae_sock->rbuf; 53 } else {
47 }); 54 print "not ok 2 - client received bad response\n";
55 }
48 56
49 $ae_sock->write ("TEST\015\012"); 57 $cv->broadcast;
50 }
51 ); 58 });
52 59}, sub {
53$ae_sock->on_eof (sub { $cv->broadcast }); 60 warn "couldn't connect: $!";
61 $cv->broadcast;
62}, 10);
54 63
55$cv->wait; 64$cv->wait;
56
57is ($lbytes, "TEST\015\012", 'listening end received data');
58is ($rbytes, "BLABLABLA\015\012", 'connecting received response');
59

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines