Make iomux select/epoll handle EINTR
This commit is contained in:
+8
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user