| Revision: | 1.8 |
| Committed: | Fri Jul 4 12:21:58 2008 UTC (18 years, 4 months ago) by elmex |
| Content type: | application/x-troff |
| Branch: | MAIN |
| CVS Tags: | rel-4_91, rel-4_23, rel-4_21, rel-4_412, rel-4_81, rel-4_83, rel-4_82, rel-4_86, rel-4_352, rel-5_112, rel-4_351, rel-5_251, rel-0_85, rel-4_331, rel-4_231, rel-4_233, rel-4_232, rel-4_8, rel-4_234, rel-4_4, rel-5_261, rel-5_271, rel-5_28, rel-5_29, rel-5_21, rel-5_22, rel-5_23, rel-5_24, rel-5_26, rel-5_27, rel-5_1, rel-5_0, rel-5_2, rel-4_22, rel-5_201, rel-5_202, rel-4_161, rel-5_111, rel-4_881, rel-4_411, rel-4_9, rel-5_01, rel-4_45, rel-4_41, rel-4_42, rel-4_2, rel-4_88, rel-4_3, rel-5_11, rel-5_12, rel-4_31, rel-4_32, rel-4_33, rel-4_34, rel-4_35 |
| Changes since 1.7: | +1 -1 lines |
| Log Message: | .... |
| # | User | Rev | Content |
|---|---|---|---|
| 1 | elmex | 1.1 | #!perl |
| 2 | root | 1.5 | |
| 3 | elmex | 1.1 | use strict; |
| 4 | root | 1.5 | |
| 5 | root | 1.2 | use AnyEvent::Impl::Perl; |
| 6 | elmex | 1.1 | use AnyEvent::Handle; |
| 7 | use Socket; | ||
| 8 | |||
| 9 | elmex | 1.3 | print "1..7\n"; |
| 10 | |||
| 11 | elmex | 1.1 | my $cv = AnyEvent->condvar; |
| 12 | |||
| 13 | socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC; | ||
| 14 | |||
| 15 | elmex | 1.3 | my $rd_ae = |
| 16 | AnyEvent::Handle->new ( | ||
| 17 | fh => $rd, | ||
| 18 | on_eof => sub { | ||
| 19 | warn "reader got EOF"; | ||
| 20 | $cv->broadcast | ||
| 21 | } | ||
| 22 | ); | ||
| 23 | |||
| 24 | my $wr_ae = | ||
| 25 | AnyEvent::Handle->new ( | ||
| 26 | fh => $wr, | ||
| 27 | on_eof => sub { | ||
| 28 | warn "writer got EOF\n"; | ||
| 29 | $cv->broadcast | ||
| 30 | } | ||
| 31 | ); | ||
| 32 | elmex | 1.1 | |
| 33 | my $dat = ''; | ||
| 34 | |||
| 35 | root | 1.6 | $rd_ae->push_read (chunk => 5132, sub { |
| 36 | elmex | 1.1 | my ($rd_ae, $data) = @_; |
| 37 | $dat = substr $data, 0, 2; | ||
| 38 | $dat .= substr $data, -5; | ||
| 39 | elmex | 1.3 | |
| 40 | print "ok 4 - first read chunk\n"; | ||
| 41 | elmex | 1.7 | my $n = 5; |
| 42 | elmex | 1.3 | $wr_ae->push_write ("A" x 5000); |
| 43 | $wr_ae->on_drain (sub { | ||
| 44 | my ($wr_ae) = @_; | ||
| 45 | $wr_ae->on_drain; | ||
| 46 | elmex | 1.7 | print "ok " . $n++ . " - fourth write\n"; |
| 47 | elmex | 1.3 | |
| 48 | elmex | 1.7 | }); |
| 49 | |||
| 50 | elmex | 1.8 | $rd_ae->push_read (chunk => 5000, sub { |
| 51 | elmex | 1.7 | print "ok " . $n++ . " - second read chunk\n"; |
| 52 | $cv->broadcast | ||
| 53 | elmex | 1.3 | }); |
| 54 | elmex | 1.1 | }); |
| 55 | |||
| 56 | elmex | 1.3 | $wr_ae->push_write ("A" x 5000); |
| 57 | $wr_ae->push_write ("X" x 130); | ||
| 58 | elmex | 1.1 | |
| 59 | elmex | 1.3 | # and now some extreme CPS action: |
| 60 | $wr_ae->on_drain (sub { | ||
| 61 | my ($wr_ae) = @_; | ||
| 62 | $wr_ae->on_drain; | ||
| 63 | print "ok 1 - first write\n"; | ||
| 64 | |||
| 65 | $wr_ae->push_write ("Y"); | ||
| 66 | $wr_ae->on_drain (sub { | ||
| 67 | my ($wr_ae) = @_; | ||
| 68 | $wr_ae->on_drain; | ||
| 69 | print "ok 2 - second write\n"; | ||
| 70 | |||
| 71 | $wr_ae->push_write ("Z"); | ||
| 72 | $wr_ae->on_drain (sub { | ||
| 73 | my ($wr_ae) = @_; | ||
| 74 | $wr_ae->on_drain; | ||
| 75 | print "ok 3 - third write\n"; | ||
| 76 | }); | ||
| 77 | }); | ||
| 78 | }); | ||
| 79 | elmex | 1.1 | |
| 80 | $cv->wait; | ||
| 81 | |||
| 82 | elmex | 1.3 | if ($dat eq "AAXXXYZ") { |
| 83 | print "ok 7 - received data\n"; | ||
| 84 | } else { | ||
| 85 | warn "dat was '$dat'\n"; | ||
| 86 | print "not ok 7 - received data\n"; | ||
| 87 | } |