Я мало знаю о epoll
, после проверки некоторых документов, то думаю, что это работает так:Как использовать epoll и сделать функции обработчика неблокирующими?
while(true){
epoll_wait(some_sock_fds);
foreach(usable_fds){
handler(one_fd); <----- this function must be non-blocking ?
}
}
В функции handler
должно быть что-то о сети чтения/записи или операции с файлами, я думаю, что это должно быть не- блокирование, да?
Как написать функцию handler
, чтобы она не блокировала основной цикл?
Это может быть блокировка, epoll ждет и дает вам только те fds, которые не блокируются, поэтому обработчик гарантированно не блокируется. –
@RomanHocke в цикле foreach, обрабатывать первый 'fd' может стоить 5 секунд, второй' fd' должен ждать 5 секунд, да? – user1418404
«обрабатывать первый fd может стоить 5 секунд» Данные для первого fd готовы, это гарантировано epoll, не будет ждать. –