24 #if !LELY_NO_STDIO && _POSIX_C_SOURCE >= 200112L
35 int arg = fcntl(fd, F_GETFD);
38 if (!(arg & FD_CLOEXEC) && fcntl(fd, F_SETFD, arg | FD_CLOEXEC) == -1)
46 int arg = fcntl(fd, F_GETFL);
49 if (!(arg & O_NONBLOCK) && fcntl(fd, F_SETFL, arg | O_NONBLOCK) == -1)
60 struct pollfd fds[1] = { { .fd = fd, .events = *events } };
62 result = poll(fds, 1, timeout);
64 while (result == -1 && ((timeout < 0 && errno == EINTR)
70 if (!result && timeout >= 0) {
75 *events = fds[0].revents;
84 flags |= MSG_DONTWAIT;
92 result = recvmsg(fd, msg, flags);
97 if (!timeout || (errno != EAGAIN && errno != EWOULDBLOCK))
101 int events = (flags & MSG_OOB)
102 ? (POLLRDBAND | POLLPRI) : POLLRDNORM;
118 flags |= MSG_NOSIGNAL;
121 flags |= MSG_DONTWAIT;
129 result = sendmsg(fd, msg, flags);
134 if (!timeout || (errno != EAGAIN && errno != EWOULDBLOCK))
137 int events = (flags & MSG_OOB) ? POLLWRBAND : POLLWRNORM;
148 #endif // !LELY_NO_STDIO && _POSIX_C_SOURCE >= 200112L