Я использую epoll для записи больших сообщений на сервер по протоколу HTTP. Все fds настроены на неблокирование, и я использую инициируемые фронтом события. Я знаю, для EPOLLIN мне нужно перебрать чтение fd, пока не вернется EAGAIN Для написания я не уверен, должен ли я продолжать цикл, как только я получу EAGAIN, или я должен ждать, пока epoll сообщит, когда fd станет доступным для чтения снова.
Например, я пишу сообщение размером 20 КБ, а при первой попытке :: записи количество отправленных данных = 13 КБ. Следующая попытка записи возвращает retVal = -1 и errno = EAGAIN.
В этот момент я должен продолжить цикл некоторое время (1), пока не смогу записать данные, или я должен ждать, пока epoll вызовет мой обратный вызов, когда FD будет снова готов к записи. Насколько я понимаю, поскольку fd зарегистрирован для записи, epoll должен уведомить меня, когда FD снова будет готов к записи. Но в моей программе этого не происходит.
Нужно ли устанавливать специальный флаг или модифицировать FD для получения уведомления?