POLLOUT. Дескриптор может принять, по меньшей мере, один байт данных для записи (это значение можно изменить путем установки другого значения нижней отметки выходного буфера сокета, как описано было ранее). Функция syswrite ( ) не заблокируется, если объем вывода не превышает этого значения. В этом событии не различаются обычные и высокоприоритетные данные.
POLLWRNORM. Дескриптор может принять, по меньшей мере, один байт обычных (нёприоритетных) данных.
POLLWRBAND. Дескриптор может принять, по меньшей мере, один байт внеочередных данных.
POLLERR. В дескрипторе возникла ошибка, например PIPE. При работе с сокетами можно определить фактический номер ошибки, вызвав функцию sockopt () с опцией SO_ERROR.
POLLNVAL. Дескриптор является недействительным. Например, он закрыт.
POLLHUP. В случае каналов и сокетов удалённый процесс закрыл соединение. Это событие не применяется для обычных файлов.
Существуют тонкие различия в реализации событий POLLIN и POLLHUP в разных операционных системах и дескрипторах ввода-вывода различных типов. Во многих операционных системах метод poll () возвращает событие POLLIN для дескриптора файла, предназначенного для чтения, если обнаружен конец файла. Напомним, что при работе с обычными дескрипторами файлов это событие возникает при обнаружений признака конца файла, а в сокетах — при закрытии вторым участником обмена данными своего конца соединения.
К сожалению, эти правила не везде одинаковы. В некоторых (даже, возможно, по всех) системах Linux событие POLLIN при закрытии сокета не устанавливается. Поэтому приходится проверять событие POLLHUP. Однако это событие относится только к сокетам и каналам и не применяется к обычным дескрипторам файлов; в результате логика программы становится довольно замысловатой.