diff --git a/src/xcb_in.c b/src/xcb_in.c index 2997de4..dc41c68 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -30,8 +30,8 @@ #include #include #include -#include #include +#include #include "xcb.h" #include "xcbext.h" @@ -241,12 +241,12 @@ static int read_block(const int fd, void *buf, const size_t len) done += ret; if(ret < 0 && errno == EAGAIN) { - fd_set fds; - FD_ZERO(&fds); - FD_SET(fd, &fds); - do { - ret = select(fd + 1, &fds, 0, 0, 0); - } while (ret == -1 && errno == EINTR); + struct pollfd fds; + fds.fd = fd; + fds.events = POLLIN; + ret = poll(&fds, 1, -1); + if (ret < 0 && EINTR == errno) + ret = 1; /* try to read */ } if(ret <= 0) return ret;