return feof(call_sock) || errno==ECONNRESET;
}
-// Does protocol exchange. Returns 0 if OK, -1 if peer was garbage.
-static int protocol_exchange(FILE *call_sock) {
+// Does protocol exchange. Returns 0 if OK, error msg if peer was garbage.
+static const char *protocol_exchange(FILE *call_sock) {
char ack;
size_t sr = fread(&ack, sizeof(ack), 1, call_sock);
if (sr != 1) {
- if (was_eof(call_sock)) return -1;
+ if (was_eof(call_sock)) return "initial monitor process quit";
diee("read() ack byte");
}
if (ack != '\n') die("got ack byte 0x%02x, not '\n'", ack);
call_sock = call_sock_from_fd(fd);
fd = -1;
- if (protocol_exchange(call_sock) < 0)
+ if (protocol_exchange(call_sock))
goto x_garbage;
return call_sock;