Make iomux select/epoll handle EINTR

This commit is contained in:
Nils O. Selåsdal
2012-11-13 09:44:44 +01:00
parent d83c651707
commit c378d39dfe
2 changed files with 12 additions and 4 deletions
+8 -3
View File
@@ -133,6 +133,8 @@ static int iomux_select_run(struct IOMux *mux_, struct timeval *timeout)
int rc;
size_t i;
int event_cnt = 0;
fd_set read_set;
fd_set write_set;
if(mux->deleted_cnt) {
iomux_select_rebuild(mux);
@@ -142,10 +144,13 @@ static int iomux_select_run(struct IOMux *mux_, struct timeval *timeout)
if(mux->max_fd == -1 && timeout == NULL)
return 0;
fd_set read_set = mux->master_read_set;
fd_set write_set = mux->master_write_set;
again:
read_set = mux->master_read_set;
write_set = mux->master_write_set;
rc = select(mux->max_fd + 1, &read_set, &write_set, NULL, timeout); //we can use timeout directly
if(rc == -1 && errno == EINTR)
goto again;
assert(rc >= 0);
if(rc < 0)
return -1;