1 | #!perl |
1 | #!perl |
2 | |
2 | |
3 | use strict; |
3 | use strict; |
4 | |
4 | |
5 | use AnyEvent::Impl::Perl; |
5 | use AnyEvent; |
|
|
6 | BEGIN { require AnyEvent::Impl::Perl unless $ENV{PERL_ANYEVENT_MODEL} } |
|
|
7 | use AnyEvent::Util; |
6 | use AnyEvent::Handle; |
8 | use AnyEvent::Handle; |
7 | use Socket; |
9 | use Socket; |
8 | |
10 | |
9 | print "1..7\n"; |
11 | print "1..7\n"; |
10 | |
12 | |
11 | my $cv = AnyEvent->condvar; |
13 | my $cv = AnyEvent->condvar; |
12 | |
14 | |
13 | socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC; |
15 | my ($rd, $wr) = portable_socketpair; |
14 | |
16 | |
15 | my $rd_ae = |
17 | my $rd_ae = |
16 | AnyEvent::Handle->new ( |
18 | AnyEvent::Handle->new ( |
17 | fh => $rd, |
19 | fh => $rd, |
18 | on_eof => sub { |
20 | on_eof => sub { |
… | |
… | |
30 | } |
32 | } |
31 | ); |
33 | ); |
32 | |
34 | |
33 | my $dat = ''; |
35 | my $dat = ''; |
34 | |
36 | |
35 | $rd_ae->push_read_chunk (5132, sub { |
37 | $rd_ae->push_read (chunk => 5132, sub { |
36 | my ($rd_ae, $data) = @_; |
38 | my ($rd_ae, $data) = @_; |
37 | $dat = substr $data, 0, 2; |
39 | $dat = substr $data, 0, 2; |
38 | $dat .= substr $data, -5; |
40 | $dat .= substr $data, -5; |
39 | |
41 | |
40 | print "ok 4 - first read chunk\n"; |
42 | print "ok 4 - first read chunk\n"; |
|
|
43 | my $n = 5; |
41 | $wr_ae->push_write ("A" x 5000); |
44 | $wr_ae->push_write ("A" x 5000); |
42 | $wr_ae->on_drain (sub { |
45 | $wr_ae->on_drain (sub { |
43 | my ($wr_ae) = @_; |
46 | my ($wr_ae) = @_; |
44 | $wr_ae->on_drain; |
47 | $wr_ae->on_drain; |
45 | print "ok 5 - fourth write\n"; |
48 | print "ok " . $n++ . " - fourth write\n"; |
46 | |
49 | |
|
|
50 | }); |
|
|
51 | |
47 | $rd_ae->push_read_chunk (1, sub { |
52 | $rd_ae->push_read (chunk => 5000, sub { |
48 | print "ok 6 - second read chunk\n"; |
53 | print "ok " . $n++ . " - second read chunk\n"; |
49 | $cv->broadcast |
54 | $cv->broadcast |
50 | }); |
|
|
51 | }); |
55 | }); |
52 | }); |
56 | }); |
53 | |
57 | |
54 | $wr_ae->push_write ("A" x 5000); |
58 | $wr_ae->push_write ("A" x 5000); |
55 | $wr_ae->push_write ("X" x 130); |
59 | $wr_ae->push_write ("X" x 130); |