Может ли epoll получить пакет udp? - PullRequest
1 голос
/ 16 июня 2011

Я новичок в сетевом программировании и слышал об epoll. Я прочитал несколько учебных пособий, и теперь у меня есть общее представление о том, что делает epoll и как я могу это реализовать.

Вопрос в том, могу ли я использовать epoll, даже если клиент будет использовать соединение udp? Все учебники, которые я прочитал, использовали TCP-соединение.

Также есть хорошие учебники или пример кода, который объясняет многопоточную реализацию сервера с использованием epoll? В тех уроках, которые я получил из Интернета, было показано, как создать простой эхо-сервер в одном потоке.

Спасибо заранее.

1 Ответ

1 голос
/ 16 июня 2011

Нет проблем с использованием epoll с UDP, epoll просто уведомляет, есть ли данные для чтения в дескрипторе файла.Есть некоторые последствия в операциях чтения / записи ..., связанных с поведением сокета UDP (со страницы руководства epoll):

       For stream-oriented files (e.g., pipe, FIFO, stream socket), the condition
       that the read/write I/O space is exhausted can also be detected by
       checking the amount of data read from / written to the target file
       descriptor.  For example, if you call read(2) by asking to read a certain
       amount of data and read(2) returns a lower number of bytes, you can be
       sure of having exhausted the read I/O space for the file descriptor.  The
       same is true when writing using write(2).  (Avoid this latter technique if
       you cannot guarantee that the monitored file descriptor always refers to a
       stream-oriented file.)

С другой стороны, не оченьобычно использовать epoll напрямую.Лучший способ использования epoll - это, например, использовать библиотеку цикла событий, libev или libevent.Это лучший подход, потому что epoll доступен не в каждой системе, и с помощью такого рода библиотек ваши программы более переносимы.

Здесь вы можете найти пример использования libev с UDP,и Здесь другой пример с libevent.

...