Если я выполняю epoll_wait () в прослушивающем сокете и когда epoll_wait () возвращает указание на то, что он имеет активность (в данном случае соединение ожидает ожидания accept () ed), то если вызов accept () завершится неудачно сerrno = EINTR, будет ли epoll_wait () указывать на то, что то же соединение ожидает в сокете прослушивания при следующем возврате?
то есть мне нужно будет что-то сделать в соответствии с:
while(1){
epoll_wait(epfd, &events, maxevents, timeout);
if (events.data.fd == listener){
connsock = accept(listener, &addr, &addrlen);
while (connsock != -1){
if (errno == EINTR){
accept(listener, &addr, &addrlen);
}
}
}
}
, чтобы удостовериться, что соединение получено, или это будет работать, и все еще гарантировать, что соединение, для которого accept () было прервано сигналом, будет принято:
while(1){
epoll_wait(epfd, &events, maxevents, timeout);
if (events.data.fd == listener){
connsock = accept(listener, &addr, &addrlen);
}
}
где в этом случаеесли accept () прерван сигналом, он просто в следующий раз перехватит то же соединение через цикл после возвращения epoll_wait.
Очевидно, что в обоих этих примерах я делаю некоторые предположения (это тольконапример, одно событие в одном сокете возвращается в данном вызове epoll_wait и не включает проверку ошибок (за исключением EINTR для accept (), посколькувот и весь смысл) упростить вещи