- if (sendmsg(socket, &msg, 0) == -1)
- fatal("%s: sendmsg(%d)", __FUNCTION__, fd);
+ pfd.fd = sock;
+ pfd.events = POLLOUT;
+ while ((n = sendmsg(sock, &msg, 0)) == -1 &&
+ (errno == EAGAIN || errno == EINTR)) {
+ debug3("%s: sendmsg(%d): %s", __func__, fd, strerror(errno));
+ (void)poll(&pfd, 1, -1);
+ }
+ if (n == -1) {
+ error("%s: sendmsg(%d): %s", __func__, fd,
+ strerror(errno));
+ return -1;
+ }
+
+ if (n != 1) {
+ error("%s: sendmsg: expected sent 1 got %ld",
+ __func__, (long)n);
+ return -1;
+ }
+ return 0;
+#else
+ error("%s: file descriptor passing not supported", __func__);
+ return -1;
+#endif