1 | use Coro; |
1 | use Coro; |
2 | use Coro::Semaphore; |
2 | use Coro::Semaphore; |
3 | use Coro::Event; |
3 | use Coro::Event; |
4 | use Coro::Socket; |
4 | use Coro::Socket; |
5 | use Coro::Signal; |
5 | use Coro::Signal; |
|
|
6 | use Coro::AIO (); |
6 | |
7 | |
7 | use HTTP::Date; |
8 | use HTTP::Date; |
8 | use POSIX (); |
9 | use POSIX (); |
9 | |
10 | |
10 | use Compress::Zlib (); |
11 | use Compress::Zlib (); |
… | |
… | |
143 | use Convert::Scalar 'weaken'; |
144 | use Convert::Scalar 'weaken'; |
144 | use IO::AIO; |
145 | use IO::AIO; |
145 | |
146 | |
146 | IO::AIO::min_parallel $::AIO_PARALLEL; |
147 | IO::AIO::min_parallel $::AIO_PARALLEL; |
147 | |
148 | |
148 | Event->io(fd => IO::AIO::poll_fileno, |
149 | Event->io (fd => IO::AIO::poll_fileno, |
149 | poll => 'r', async => 1, |
150 | poll => 'r', async => 1, |
150 | cb => \&IO::AIO::poll_cb); |
151 | cb => \&IO::AIO::poll_cb); |
151 | |
152 | |
152 | our %conn; # $conn{ip}{self} => connobj |
153 | our %conn; # $conn{ip}{self} => connobj |
153 | our %uri; # $uri{ip}{uri}{self} |
154 | our %uri; # $uri{ip}{uri}{self} |
154 | our %blocked; |
155 | our %blocked; |
155 | our %mimetype; |
156 | our %mimetype; |
… | |
… | |
629 | if ($blocked{$self->{remote_id}}) { |
630 | if ($blocked{$self->{remote_id}}) { |
630 | $self->{h}{connection} = "close"; |
631 | $self->{h}{connection} = "close"; |
631 | die bless {}, err::; |
632 | die bless {}, err::; |
632 | } |
633 | } |
633 | |
634 | |
634 | if (0) { # !AIO |
635 | Coro::AIO::aio_read $fh, $l, ($h > $bufsize ? $bufsize : $h), $buf, 0 |
635 | sysread $fh, $buf, $h > $bufsize ? $bufsize : $h |
|
|
636 | or last; |
636 | or last; |
637 | } else { |
|
|
638 | aio_read($fh, $l, ($h > $bufsize ? $bufsize : $h), |
|
|
639 | $buf, 0, sub { |
|
|
640 | $r = $_[0]; |
|
|
641 | Coro::ready($current); |
|
|
642 | }); |
|
|
643 | &Coro::schedule; |
|
|
644 | last unless $r; |
|
|
645 | } |
|
|
646 | |
637 | |
647 | $tbf->request(length $buf); |
638 | $tbf->request (length $buf); |
648 | my $w = syswrite $self->{fh}, $buf |
639 | my $w = syswrite $self->{fh}, $buf |
649 | or last; |
640 | or last; |
650 | $::written += $w; |
641 | $::written += $w; |
651 | $self->{written} += $w; |
642 | $self->{written} += $w; |
652 | $l += $r; |
643 | $l += $r; |
… | |
… | |
655 | close $fh; |
646 | close $fh; |
656 | } |
647 | } |
657 | } |
648 | } |
658 | |
649 | |
659 | 1 |
650 | 1 |
|
|
651 | |