2016-11-05 8 views
0

Я мало знаю о epoll, после проверки некоторых документов, то думаю, что это работает так:Как использовать epoll и сделать функции обработчика неблокирующими?

while(true){ 
    epoll_wait(some_sock_fds); 
    foreach(usable_fds){ 
     handler(one_fd); <----- this function must be non-blocking ? 
    } 
} 

В функции handler должно быть что-то о сети чтения/записи или операции с файлами, я думаю, что это должно быть не- блокирование, да?

Как написать функцию handler, чтобы она не блокировала основной цикл?

+0

Это может быть блокировка, epoll ждет и дает вам только те fds, которые не блокируются, поэтому обработчик гарантированно не блокируется. –

+0

@RomanHocke в цикле foreach, обрабатывать первый 'fd' может стоить 5 секунд, второй' fd' должен ждать 5 секунд, да? – user1418404

+0

«обрабатывать первый fd может стоить 5 секунд» Данные для первого fd готовы, это гарантировано epoll, не будет ждать. –

ответ

0

Нить нити должна фокусироваться на сетевых задачах. Если сокет заблокирован, вы должны обрабатывать каждый сокет в отдельном потоке. Один поток на разъем.

 Смежные вопросы

  • Нет связанных вопросов^_^