Source
--- src/relayd.c
+++ src/relayd.c
memcpy (&s.addr, addr, sizeof (s.addr));
s.mtu = (uint16_t)mtu;
+#ifdef MSG_NOSIGNAL
if ((send (fd, &s, sizeof (s), MSG_NOSIGNAL) != sizeof (s))
|| (recv (fd, &res, sizeof (res), MSG_WAITALL) != sizeof (res)))
return -1;
+#else
+ int set = 1;
+ setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
+
+ if ((send (fd, &s, sizeof (s), 0) != sizeof (s))
+ || (recv (fd, &res, sizeof (res), MSG_WAITALL) != sizeof (res)))
+ res = -1;
+
+ set = 0;
+ setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
+#endif
return res;
}