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