Возможно ли (и безопасно) сделать принимающий сокет неблокирующим?
я ищу способ прерватьaccept()
вызов на сокет блокировки. Использование сигналов не вариант, так как это должно быть в библиотеке, и я нене хочу загромождать пользовательские сигналы. С помощьюselect()
это еще один вариант, но по разным причинам этоне очень привлекательно в моем случае.
Что бы хорошо работало, если возможно, это установить сокет в неблокирующий режим (используяfcntl()
а такжеO_NONBLOCK
) из другого потока, в то время как сокет заблокирован наaccept()
вызов. Ожидаемое поведение таково, чтоaccept()
звонок вернется сEAGAIN
или жеEWOULDBLOCK
в .errno
Будет ли это действительно работать так? Это безопасно? Портативный?
Если вы знаете о применимости этого метода для Windows (где вам нужно использоватьWSAIoctl()
а такжеFONBIO
) ЯЯ тоже заинтересован.