LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Какую проблему решаешь?

POLLHUP считай за разновидность POLLIN. То есть если хочешь проверить неблокирующее чтение - ставишь POLLIN events и проверяешь наличие POLLIN|POLLHUP в revents. Если запись - ставишь POLLOUT в events и проверяешь POLLOUT|POLLERR в revents.

POLLHUP и POLLERR в основном возвращаются на закрытый сокет, но документация на этот счёт мутная, надеяться что в разных ОС (linux, freebsd, solaris итд) оно ведёт себя одинаково, включая установку POLLIN/POLLOUT при закрытом сокете, я бы не стал. Стратегия как описано выше вроде работает норм.

Конкретно линукс при закрытом соединении ставит POLLHUP, POLLERR, POLLOUT но не POLLIN - на тот момент когда я давно это проверял.

Исправление firkax, :

Какую проблему решаешь?

POLLHUP считай за разновидность POLLIN. То есть если хочешь проверить неблокирующее чтение - ставишь POLLIN events и проверяешь наличие POLLIN|POLLHUP в revents. Если запись - ставишь POLLOUT в events и проверяешь POLLOUT|POLLERR в revents.

POLLHUP и POLLERR в основном возвращаются на закрытый сокет, но документация на этот счёт мутная, надеяться что в разных ОС (linux, freebsd, solaris итд) оно ведёт себя одинаково, включая установку POLLIN/POLLOUT при закрытом сокете, я бы не стал. Стратегия как описано выше вроде работает норм.

Конкретно линукс при закрытом сокете ставит POLLHUP, POLLERR, POLLOUT но не POLLIN - на тот момент когда я давно это проверял.

Исходная версия firkax, :

Какую проблему решаешь?

POLLHUP считай за разновидность POLLIN. То есть если хочешь проверить неблокирующее чтение - ставишь POLLIN events и проверяешь наличие POLLIN|POLLHUP в revents. Если запись - ставишь POLLOUT в events и проверяешь POLLOUT|POLLERR в revents.

POLLHUP и POLLERR в основном возвращаются на закрытый сокет, но документация на этот счёт мутная, надеяться что в разных ОС (linux, freebsd, solaris итд) оно ведёт себя одинаково я бы не стал. Стратегия как описано выше вроде работает норм.