#include <errno.h> | |
#include <stddef.h> | |
#ifdef _WIN32 | |
#include <windows.h> | |
#else | |
#include <sys/select.h> | |
#endif | |
// Wait until file descriptor |fd| becomes readable. | |
void yield_until_fd_readable(int fd) { | |
for (;;) { | |
fd_set read_fds; | |
FD_ZERO(&read_fds); | |
FD_SET(fd, &read_fds); | |
int ret = select(fd + 1, &read_fds, NULL, NULL, NULL); | |
if (ret == 1 || (ret < 0 && errno != -EINTR)) | |
return; | |
} | |
} | |