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