История изменений
Исправление 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 итд) оно ведёт себя одинаково я бы не стал. Стратегия как описано выше вроде работает норм.