=head2 $self->write($c, $buffer)
-Writes the buffer to the client. Can only be called once for a request.
+Writes the buffer to the client.
=cut
sub write {
my ( $self, $c, $buffer ) = @_;
- # Avoid 'print() on closed filehandle Remote' warnings when using IE
- return unless *STDOUT->opened();
-
- my $ret;
-
- # Prepend the headers if they have not yet been sent
- if ( my $headers = delete $self->{_header_buf} ) {
- DEBUG && warn "write: Wrote headers and first chunk (" . length($headers . $buffer) . " bytes)\n";
- $ret = $self->NEXT::write( $c, $headers . $buffer );
- }
- else {
- DEBUG && warn "write: Wrote chunk (" . length($buffer) . " bytes)\n";
- $ret = $self->NEXT::write( $c, $buffer );
+ # Avoid 'print() on closed filehandle Remote' warnings when using IE
+ return unless *STDOUT->opened();
+
+ # Prepend the headers if they have not yet been sent
+ if ( my $headers = delete $self->{_header_buf} ) {
+ $buffer = $headers . $buffer;
}
- if ( !$ret ) {
+ my $ret = $self->NEXT::write( $c, $buffer );
+
+ if ( !defined $ret ) {
$self->{_write_error} = $!;
+ DEBUG && warn "write: Failed to write response ($!)\n";
+ }
+ else {
+ DEBUG && warn "write: Wrote response ($ret bytes)\n";
}
return $ret;
if ($options->{background}) {
my $child = fork;
die "Can't fork: $!" unless defined($child);
- exit if $child;
+ return $child if $child;
}
my $restart = 0;
$self->_handler( $class, $port, $method, $uri, $protocol );
if ( my $error = delete $self->{_write_error} ) {
- DEBUG && warn "Write error: $error\n";
close Remote;
if ( !defined $pid ) {