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