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

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

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

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

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

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

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