Skip Menu |

This queue is for tickets about the HTTP-Daemon CPAN distribution.

Report information
The Basics
Id: 85904
Status: resolved
Priority: 0/
Queue: HTTP-Daemon

People
Owner: Nobody in particular
Requestors: victor [...] vsespb.ru
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Terminates after sigpipe if client close connection
This behaviour is observed at least last ~5 years, so I am not sure maybe it's a feature. I can submit PoC if required.
On Wed Jun 05 23:36:40 2013, vsespb wrote: Show quoted text
> This behaviour is observed at least last ~5 years, so I am not sure > maybe it's a feature. > > I can submit PoC if required.
==== use strict; use warnings; use HTTP::Daemon; my $PORT = 55001; if (fork()) { # parent #$SIG{PIPE}=sub{die "HEY\n";}; my $d = HTTP::Daemon->new(Timeout => 20, LocalAddr => '127.0.0.1', LocalPort => $PORT); while (my $c = $d->accept) { my $r = $c->get_request; my $body = "x" x 100_000; my $resp = HTTP::Response->new(200, 'OK', [], $body); $c->send_response($resp); print STDERR "sent\n"; $c = undef; # close connection } print "DONE\n"; wait; } else { # child my $sock = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => $PORT, Proto => 'tcp'); print $sock "GET /\n\n"; close $sock; } ==== perl daemonpoc.pl || echo $? will print 141. this means SIGPIPE (SIGPIPE number is 13 + 128 = 141). also if you uncomment #$SIG{PIPE}=sub{die "HEY\n";}; it will print "HEY" I think it something that should be at least documented. people who use high level API like $c->send_response($resp); have insperation that they don't do low level things like writings to the sockets, so they are not expect they need to handle SIGPIPE.