Возможно ли (и безопасно) сделать принимающий сокет неблокирующим?

Я ищу способ прерватьaccept() вызов на сокет блокировки. Использование сигналов не вариант, так как это должно быть в библиотеке, и я не хочу загромождать пользовательские сигналы. С помощьюselect() это другой вариант, но по разным причинам это не очень привлекательно в моем случае.

Что бы хорошо работало, если возможно, это установить сокет в неблокирующий режим (используяfcntl() а такжеO_NONBLOCK) из другого потока, в то время как сокет заблокирован наaccept() вызов. Ожидаемое поведение таково, чтоaccept() звонок вернется сEAGAIN или жеEWOULDBLOCK вerrno.

Будет ли это действительно работать так? Это безопасно? Портативный?

Если вы знаете о применимости этого метода для Windows (где вам нужно использоватьWSAIoctl() а такжеFONBIO), Мне тоже интересно.

Ответы на вопрос(1)

Ваш ответ на вопрос