Почему sendfile не проверяет, будет ли блокироваться чтение из входного дескриптора?

Как сервер, я хочу читать из неблокирующего клиентского сокета, а затем записывать в файл.

Согласно справочной странице для sendfile, если для errno установлено значение EAGAIN, то это означает только то, что если дескриптор файла output установлен как неблокирующий, то вызов sendfile будет заблокирован.

То есть базовый вызов, который делает sendfile для записи, будет заблокирован.

Есть ли способ использовать sendfile, чтобы errno был EAGAIN, если чтение будет заблокировано?


person Muno    schedule 01.12.2017    source источник


Ответы (1)


Конечно.

Используя библиотечную функцию select() с вашим дескриптором чтения, вы можете проверить наличие EWOULDBLOCK через errno. Если он установлен, то чтение будет заблокировано.

Вы не можете увидеть, заблокируется ли чтение, проверив что-то в вашем вызове sendfile().

person David Hoelzer    schedule 01.12.2017