В событии epoll, инициированном краем, я читаю сокет (или несколько сокетов, если требуется), пока не будет больше данных (EAGAIN или EWOULDBLOCK), а затем возвращаюсь к epoll_wait. Что произойдет, если во время обработки этого чтения другой сокет (тот, который в данный момент не читается) станет готов к чтению? Будет ли epoll, инициированный краем, игнорировать это, поскольку он не блокировался в epoll_wait во время триггера/сигнала, или он вернется с сокетом в массиве событий сразу при следующем вызове epoll_wait?
epoll c, инициированный краем
comment
Если доступные данные еще не были прочитаны, вы должны получить другое событие.
- person alk   schedule 03.08.2014
comment
Хорошо, спасибо, просто чтобы внести ясность, я говорю о другом сокете, который становится доступным для чтения, чем тот, который уже читается, поэтому данные не будут перехватываться текущими операциями чтения (если я, конечно, не делаю это неправильно)!
- person jayjay   schedule 03.08.2014
Ответы (1)
Это действительно будет работать, epoll действует так, как если бы все события, которые произошли с группой epoll до того, как вы сделали вызов epoll_wait, произошли в момент, когда вы делаете вызов. epoll предназначен для такого использования, поэтому не беспокойтесь о таком использовании. Пока вы обрабатываете все события, которые были запущены во время возврата epoll_wait, вам не нужно беспокоиться о том, что происходит между его вызовами, они будут перехвачены в следующий раз, когда вы его вызовете.
В основном: ваше использование в порядке, продолжайте :)
person
Vality
schedule
12.08.2014