version 1.14, 2001/03/13 21:15:40
|
version 1.16, 2001/06/12 15:32:38
|
Line 16
|
Line 16
|
# 12/05 Scott Harrison |
# 12/05 Scott Harrison |
# 12/05 Gerd Kortemeyer |
# 12/05 Gerd Kortemeyer |
# 01/10/01 Scott Harrison |
# 01/10/01 Scott Harrison |
# 03/14/01 Gerd Kortemeyer |
# 03/14/01,03/15,06/12 Gerd Kortemeyer |
# |
# |
# based on nonforker from Perl Cookbook |
# based on nonforker from Perl Cookbook |
# - server who multiplexes without forking |
# - server who multiplexes without forking |
Line 394 while (1) {
|
Line 394 while (1) {
|
# check for new information on the connections we have |
# check for new information on the connections we have |
|
|
# anything to read or accept? |
# anything to read or accept? |
foreach $client ($select->can_read(1)) { |
foreach $client ($select->can_read(0.1)) { |
|
|
if ($client == $server) { |
if ($client == $server) { |
# accept a new connection |
# accept a new connection |
Line 443 while (1) {
|
Line 443 while (1) {
|
$rv = $client->send($outbuffer{$client}, 0); |
$rv = $client->send($outbuffer{$client}, 0); |
unless (defined $rv) { |
unless (defined $rv) { |
# Whine, but move on. |
# Whine, but move on. |
warn "I was told I could write, but I can't.\n"; |
&logthis("I was told I could write, but I can't.\n"); |
next; |
next; |
} |
} |
|
$errno=$!; |
if (($rv == length $outbuffer{$client}) || |
if (($rv == length $outbuffer{$client}) || |
($! == POSIX::EWOULDBLOCK)) { |
($errno == POSIX::EWOULDBLOCK) || ($errno == 0)) { |
substr($outbuffer{$client}, 0, $rv) = ''; |
substr($outbuffer{$client}, 0, $rv) = ''; |
delete $outbuffer{$client} unless length $outbuffer{$client}; |
delete $outbuffer{$client} unless length $outbuffer{$client}; |
} else { |
} else { |
# Couldn't write all the data, and it wasn't because |
# Couldn't write all the data, and it wasn't because |
# it would have blocked. Shutdown and move on. |
# it would have blocked. Shutdown and move on. |
|
|
|
&logthis("Dropping data with ".$errno.": ". |
|
length($outbuffer{$client}).", $rv"); |
|
|
delete $inbuffer{$client}; |
delete $inbuffer{$client}; |
delete $outbuffer{$client}; |
delete $outbuffer{$client}; |
delete $ready{$client}; |
delete $ready{$client}; |