ソケットのselect()
selectは読み込み、書き込みの両方を同時に待機できるよ。
readfdsとwritefdsの両方にfd_setを指定すれば、
読み込み可能になるか、書き込み可能になったら復帰する。
int status;
do {
fd_set rdfds;
fd_set wrfds;
FD_ZERO(&rdfds);
FD_ZERO(&wrfds);
FD_SET(fd, &rdfds);
FD_SET(fd, &wrfds);
status = select(fd + 1, &rdfds, &wrfds, null, null);
} while (status < 0 && errno == EINTR);
if (FD_ISSET(fd, &rdfds)) {
/* 読み込み可能 */
}
if (FD_ISSET(fd, &wrfds)) {
/* 書き込み可能 */
}
|