+{
+ my $conn = conn_for($sock, 'host-port');
+ $conn->write("GET /host-port HTTP/1.0\r\n\r\n");
+ $conn->read(my $buf, 4096);
+ my ($head, $body) = split(/\r\n\r\n/, $buf);
+ my ($addr, $port) = split(/:/, $body);
+ is($addr, $conn->sockhost, 'host matches addr');
+ is($port, $conn->sockport, 'port matches');
+}
+
+# graceful termination
+{
+ my $conn = conn_for($sock, 'graceful termination via slow header');
+ $conn->write("GET /slow-header HTTP/1.0\r\n" .
+ "X-Check-Fifo: $fifo\r\n\r\n");
+ open my $f, '>', $fifo or die "open $fifo: $!\n";
+ $f->autoflush(1);
+ ok(print($f "hello\n"), 'wrote something to fifo');
+ my $kpid = $pid;
+ $pid = undef;
+ is(kill('TERM', $kpid), 1, 'started graceful shutdown');
+ ok(print($f "world\n"), 'wrote else to fifo');
+ close $f or die "close fifo: $!\n";
+ $conn->read(my $buf, 8192);
+ my ($head, $body) = split(/\r\n\r\n/, $buf, 2);
+ like($head, qr!\AHTTP/1\.[01] 200 OK!, 'got 200 for slow-header');
+ is($body, "hello\nworld\n", 'read expected body');
+ is(waitpid($kpid, 0), $kpid, 'reaped httpd');
+ is($?, 0, 'no error');
+ $spawn_httpd->('-W0');
+}
+
+{
+ my $conn = conn_for($sock, 'graceful termination via slow-body');
+ $conn->write("GET /slow-body HTTP/1.0\r\n" .
+ "X-Check-Fifo: $fifo\r\n\r\n");
+ open my $f, '>', $fifo or die "open $fifo: $!\n";
+ $f->autoflush(1);
+ my $buf;
+ $conn->sysread($buf, 8192);
+ like($buf, qr!\AHTTP/1\.[01] 200 OK!, 'got 200 for slow-body');
+ like($buf, qr!\r\n\r\n!, 'finished HTTP response header');
+
+ foreach my $c ('a'..'c') {
+ $c .= "\n";
+ ok(print($f $c), 'wrote line to fifo');
+ $conn->sysread($buf, 8192);
+ is($buf, $c, 'got trickle for reading');
+ }
+ my $kpid = $pid;
+ $pid = undef;
+ is(kill('TERM', $kpid), 1, 'started graceful shutdown');
+ ok(print($f "world\n"), 'wrote else to fifo');
+ close $f or die "close fifo: $!\n";
+ $conn->sysread($buf, 8192);
+ is($buf, "world\n", 'read expected body');
+ is($conn->sysread($buf, 8192), 0, 'got EOF from server');
+ is(waitpid($kpid, 0), $kpid, 'reaped httpd');
+ is($?, 0, 'no error');
+ $spawn_httpd->('-W0');
+}
+