kqueue() и O_NONBLOCK

Если вы используете kqueue(), должны ли вы устанавливать O_NONBLOCK в своих файловых дескрипторах? Другими словами, гарантирует ли kqueue(), что следующая операция ввода-вывода с готовым файловым дескриптором не будет заблокирована, независимо от того, установлен ли O_NONBLOCK?


person Matt Fichman    schedule 18.03.2012    source источник


Ответы (2)


Если вы используете kqueue(), должны ли вы устанавливать O_NONBLOCK в своих файловых дескрипторах?

Неа.

Другими словами, гарантирует ли kqueue(), что следующая операция ввода-вывода с готовым файловым дескриптором не будет заблокирована, независимо от того, установлен ли O_NONBLOCK?

Ага.

person arrowd    schedule 26.10.2012

Тебе не нужно. Тем не менее, я обычно делаю это для проверки здравомыслия. Это приводит к тому, что такие операции, как read(), возвращают -1 и устанавливают для errno значение EWOULDBLOCK. Я бы предпочел получить EWOULDBLOCK и знать, что моя реализация kqueue содержит ошибки, чем блок вызовов read() (и, следовательно, моя программа зависает) по неизвестным причинам.

person Billy    schedule 06.12.2013