Что именно делает неблокирующий блок сокетов? Возможная опасность использования epoll() в режиме, запускаемом по фронту ⇐ Linux
-
Anonymous
Что именно делает неблокирующий блок сокетов? Возможная опасность использования epoll() в режиме, запускаемом по фронту
Предположим, мы хотим написать сервер для обработки нескольких клиентов с помощью epoll в режиме Edge-Triggered.
При использовании epoll() в режиме, запускаемом по границе, всякий раз, когда сервер получает событие EPOLLOUT или EPOLLIN, он должен записать или читайте до тех пор, пока не получите EWOULDBLOCK или EAGAIN.
Предположим, клиент подключается и отправляет ОЧЕНЬ длинное сообщение. Теперь сервер должен читать его до тех пор, пока не получит EWOULDBLOCK или EAGAIN.
Может ли сервер быть уверен, что EWOULDBLOCK или EAGAIN получен через некоторое разумное время и не прочитает гигабайты данных от этого клиента , пока все остальные клиенты ждут?
Это не просто вопрос «да» или «нет». Я с нетерпением жду возможности понять, как эта блокировка контролируется на уровне ОС.
Предположим, мы хотим написать сервер для обработки нескольких клиентов с помощью epoll в режиме Edge-Triggered.
При использовании epoll() в режиме, запускаемом по границе, всякий раз, когда сервер получает событие EPOLLOUT или EPOLLIN, он должен записать или читайте до тех пор, пока не получите EWOULDBLOCK или EAGAIN.
Предположим, клиент подключается и отправляет ОЧЕНЬ длинное сообщение. Теперь сервер должен читать его до тех пор, пока не получит EWOULDBLOCK или EAGAIN.
Может ли сервер быть уверен, что EWOULDBLOCK или EAGAIN получен через некоторое разумное время и не прочитает гигабайты данных от этого клиента , пока все остальные клиенты ждут?
Это не просто вопрос «да» или «нет». Я с нетерпением жду возможности понять, как эта блокировка контролируется на уровне ОС.
Мобильная версия