ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Coro/myhttpd/httpd.pl
(Generate patch)

Comparing cvsroot/Coro/myhttpd/httpd.pl (file contents):
Revision 1.56 by root, Mon Dec 3 04:57:22 2001 UTC vs.
Revision 1.61 by root, Thu Jan 3 01:20:17 2002 UTC

50} 50}
51 51
52our $connections = new Coro::Semaphore $MAX_CONNECTS || 250; 52our $connections = new Coro::Semaphore $MAX_CONNECTS || 250;
53our $httpevent = new Coro::Signal; 53our $httpevent = new Coro::Signal;
54 54
55our $queue_file = new transferqueue $MAX_TRANSFERS; 55our $queue_file = new transferqueue slots => $MAX_TRANSFERS, maxsize => 256*1024*1024;
56our $queue_index = new transferqueue 10; 56our $queue_index = new transferqueue slots => 10;
57 57
58my @newcons; 58my @newcons;
59my @pool; 59my @pool;
60 60
61# one "execution thread" 61# one "execution thread"
161 my (undef, $iaddr) = unpack_sockaddr_in $peername 161 my (undef, $iaddr) = unpack_sockaddr_in $peername
162 or $self->err(500, "unable to decode peername"); 162 or $self->err(500, "unable to decode peername");
163 163
164 $self->{remote_addr} = 164 $self->{remote_addr} =
165 $self->{remote_id} = inet_ntoa $iaddr; 165 $self->{remote_id} = inet_ntoa $iaddr;
166
166 $self->{time} = $::NOW; 167 $self->{time} = $::NOW;
167 168
168 weaken ($Coro::current->{conn} = $self); 169 weaken ($Coro::current->{conn} = $self);
169 170
170 $::conns++; 171 $::conns++;
448 } 449 }
449 } 450 }
450 } elsif (-f _ && -r _) { 451 } elsif (-f _ && -r _) {
451 -x _ and $self->err(403, "forbidden"); 452 -x _ and $self->err(403, "forbidden");
452 453
453 if (%{$conn{$self->{remote_id}}} > $::MAX_TRANSFERS_IP) { 454 if (keys %{$conn{$self->{remote_id}}} > $::MAX_TRANSFERS_IP) {
454 my $timeout = $::NOW + 10; 455 my $timeout = $::NOW + 10;
455 while (%{$conn{$self->{remote_id}}} >= $::MAX_TRANSFERS_IP) { 456 while (keys %{$conn{$self->{remote_id}}} > $::MAX_TRANSFERS_IP) {
456 if ($timeout < $::NOW) { 457 if ($timeout < $::NOW) {
457 $self->block($::BLOCKTIME, "too many connections"); 458 $self->block($::BLOCKTIME, "too many connections");
458 } else { 459 } else {
459 $httpevent->wait; 460 $httpevent->wait;
460 } 461 }
509 510
510satisfiable: 511satisfiable:
511 # check for segmented downloads 512 # check for segmented downloads
512 if ($l && $::NO_SEGMENTED) { 513 if ($l && $::NO_SEGMENTED) {
513 my $timeout = $::NOW + 15; 514 my $timeout = $::NOW + 15;
514 while (%{$uri{$self->{remote_id}}{$self->{uri}}} > 1) { 515 while (keys %{$uri{$self->{remote_id}}{$self->{uri}}} > 1) {
515 if ($timeout <= $::NOW) { 516 if ($timeout <= $::NOW) {
516 $self->block($::BLOCKTIME, "segmented downloads are forbidden"); 517 $self->block($::BLOCKTIME, "segmented downloads are forbidden");
517 #$self->err_segmented_download; 518 #$self->err_segmented_download;
518 } else { 519 } else {
519 $httpevent->wait; 520 $httpevent->wait;
566 } 567 }
567 } 568 }
568 569
569 if ($blocked{$self->{remote_id}}) { 570 if ($blocked{$self->{remote_id}}) {
570 $self->{h}{connection} = "close"; 571 $self->{h}{connection} = "close";
571 die bless {}, err:: 572 die bless {}, err::;
572 } 573 }
573 574
574 if (0) { # !AIO 575 if (0) { # !AIO
575 sysread $fh, $buf, $h > $bufsize ? $bufsize : $h 576 sysread $fh, $buf, $h > $bufsize ? $bufsize : $h
576 or last; 577 or last;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines