struct timespec ts;
int nfds, n;
- if (timeout < 0) {
- ts.tv_sec = 0;
- ts.tv_nsec = 0;
- } else {
+ if (timeout > 0) {
ts.tv_sec = timeout / 1000;
ts.tv_nsec = timeout * 1000000;
}
- nfds = kevent(poll_fd, NULL, 0, events, ARRAY_SIZE(events), &ts);
+ nfds = kevent(poll_fd, NULL, 0, events, ARRAY_SIZE(events), timeout > 0 ? &ts : NULL);
for(n = 0; n < nfds; ++n)
{
struct uloop_fd *u = events[n].udata;
unsigned int fl;
int ret;
- if (!sock->registered) {
+ if (!sock->registered && !(flags & ULOOP_BLOCKING)) {
fl = fcntl(sock->fd, F_GETFL, 0);
fl |= O_NONBLOCK;
fcntl(sock->fd, F_SETFL, fl);