}
static void send_request(void) {
- // Sending these first makes it easier for the script to
+ char ibyte= 0;
+ ssize_t sr = fwrite(&ibyte, 1, 1, call_sock);
+ if (sr != 1) diee("write signalling byte");
+
+ // Sending these before the big message makes it easier for the script to
// use buffered IO for the message.
send_fd(0);
send_fd(1);
prepare_message(0, &p);
assert(p == m + tlen);
- ssize_t sr = fwrite(m, tlen, 1, call_sock);
+ sr = fwrite(m, tlen, 1, call_sock);
if (sr != 1) diee("write request (buffer)");
if (fflush(call_sock)) diee("write request");
my $greeting = "PFI\n\0\0\0\0";
protocol_write($greeting);
+ my $ibyte = 0;
+ my $r;
+ for (;;) {
+ $r = sysread CALL, $ibyte, 1;
+ last if $r > 0;
+ $!==EINTR or protocol_read_fail("signalling byte");
+ }
+ $r == 1 or _exit(0);
+ $ibyte = ord $ibyte;
+ $ibyte and die(sprintf "signalling byte is 0x%02x, not zero", $ibyte);
+
@call_fds = map {
my $r;
for (;;) {
} 0..2;
my $len;
- my $r = read(CALL, $len, 4) // protocol_read_fail("message length");
+ $r = read(CALL, $len, 4) // protocol_read_fail("message length");
$r == 4 or _exit(0);
$len = unpack "N", $len;