+ if (errno==ECONNREFUSED || errno==ENOENT) goto x_garbgae;
+ diee("connect() %s", socket_path);
+ }
+
+ for (;;) {
+ char ack;
+ sr = read(fd, &ack, 1);
+ if (sr == -1) {
+ if (errno==ECONNRESET) goto x_garbage;
+ if (errno==EINTR) continue;
+ diee("read() ack byte");
+ }
+ if (sr == 0) { goto x_garbage; }
+ if (ack != '\n') die("got ack byte 0x%02x, not '\n'", ack);
+ return fd;
+ }
+
+ x_garbage:
+ if (fd >= 0) close(fd);
+ return -1;
+}
+
+static int connect_or_spawn(void) {
+ int fd = connect_existing();
+ if (fd >= 0) return fd;
+
+ let acquire_lock();
+ fd = connect_existing();
+
+int main(int argc, const char *const *argv) {
+ script = process_opts(argc, argv);
+
+ find_socket_path();
+ int fd = connect_or_spawn();