Серверное приложение через poll ждет события, что пришли данные на неблокирующий(ие) сокет(ы), далее читает их и обрабатывает. Алгоритм Нейгла отключен. Клиент передает большой файл (1.5M) пакетами по 60k.
Проблема следующая: после приема одного или нескольких пакетов, poll перестает сигнализировать, что пришли новые данные, система сохраняет их в своих буферах и сигнализирует только когда клиент передаст все данные и передает их приложению. Вся эта буферизация жрет кучу ресурсов и сильно снижает производительность приложения.
Пробовал тупое решение: Клиент после отправки каждого пакета делал задержку 200-300 ms, это помогает, только величину задержки надо менять для соединений на разных скоростях, да и неправильно это...
Вопрос: как заставить систему не буферизовать данные, а отдавать их по мере получения? И в чем собственно проблема?