Мне просто пришло в голову, (это дикое предположение и, вероятно, маловероятно), но, возможно, у вас возникла проблема с задержкой подтверждения из-за того, что ваш буфер отправки меньше размера данных, которые вы пишете. Нагл может не иметь к этому никакого отношения.
Отправляет ли принимающая сторона данные обратно немедленно? Если нет, то ваш коллега будет задерживать подтверждение до 200 мс, ожидая, когда он получит ответ, а некоторые данные будут использоваться для более эффективного использования пропускной способности.
Когда буфер отправки на сокете меньше данных, в этом случае вызов для записи будет блокироваться до тех пор, пока подтверждение не будет получено и все данные не отправлены.
Например, если ваш буфер отправки составляет 8192 байта, а вы отправляете 8193 байта, а ваш одноранговый узел не отправляет данные обратно, тогда ваша запись будет блокироваться на 200 мс (или, как бы долго ни выполнялась ваша одноранговая реализация), эффективно создавая впечатление, будто Nagle убивает вы, даже когда он отключен.
Если это так, вы можете либо увеличить размер буфера отправки, либо ваш коллега всегда отправляет вам обратно нулевой байт, чтобы принудительно отправить ack.
В противном случае, я бы, возможно, попытался немного поиграться с NTttcp_x86 , чтобы смоделировать шаблоны отправки / получения ваших приложений и посмотреть, возможно, что-то еще происходит.