assert(p == m + len + 4);
ssize_t sr = fwrite(p, len, 1, call_sock);
- if (sr != 1) diee("write request");
+ if (sr != 1) diee("write request (buffer)");
+
+ if (fflush(call_sock)) diee("write request");
}
static FILE *call_sock_from_fd(int fd) {
// Returns -1 on EOF
static int protocol_read_maybe(void *data, size_t sz) {
+ if (!sz) return 0;
size_t sr = fread(data, sz, 1, call_sock);
if (sr != 1) {
if (was_eof(call_sock)) return -1;
- diee("read() on monitor call socket");
+ diee("read() on monitor call socket (%zd)", sz);
}
return 0;
}
$r == $len or _exit(0);
@ARGV = split /\0/, $data;
- @ARGV >= 2 or die("message data has too few strings");
+ @ARGV >= 2 or die("message data has too few strings (".(scalar @ARGV).")");
length(pop(@ARGV)) and die("message data missing trailing nul");
%ENV = ();
while (my $s = shift @ARGV) {
my (@vsns) = split /,/, $env_data[0];
croak "$env_name doesn't offer protocol v1" unless grep { $_ eq 'v1' } @vsns;
my @env_fds = split /,/, $env_data[1];
- croak "$env_name has too few fds" unless @env_fds >= 3;;
+ croak "$env_name has too few fds" unless @env_fds >= 2;;
$#env_fds = 1;
$socket_path = $env_data[2];
#!/usr/bin/prefork-interp perl
+# -*- perl -*-
use strict;
BEGIN { unshift @INC, '.' }
use Proc::Prefork;
-print STDERR "BEGIN - STDERR - @ARGV\n" and flush STDERR or die $!;
-print STDOUT "BEGIN - STDOUT - @ARGV\n" and flush STDOUT or die $!;
+sub prwhen ($) {
+ my ($when) = @_;
+ my @env = sort keys %ENV;
+ print STDERR "$when - STDERR - @ARGV - $ENV{PREFORK_INTERP} - @env"
+ and flush STDERR or die $!;
+ print STDOUT "$when - STDOUT\n"
+ and flush STDOUT or die $!;
+}
+
+prwhen('BEGIN');
initialisation_complete();
-print STDERR "AFTER - STDERR - @ARGV\n" and flush STDERR or die $!;
-print STDOUT "AFTER - STDOUT - @ARGV\n" and flush STDOUT or die $!;
+prwhen('AFTER');
while (<STDIN>) {
last unless m{\S};