Есть ли способ заставить Windows производить короткие чтения / записи при вызовах сокетов?

это для целей отладки.
Чтобы проверить, что короткая часть кода для обработки send / short recv работает …
Есть ли способ заставить Windows создавать короткие send / rcvs даже для небольшого количества байтов, которые будут считываться / записываться из / в сокет?
Я предпочитаю делать это для каждого процесса, но если это невозможно сделать для каждого процесса, я готов проверить, как это делает код Firefox / Outlook. 🙂

Конечно, я знаю, что могу вручную добавить огромные сообщения, чтобы заставить это, но я работаю над огромной старой кодовой базой, которая имеет слои материала, поэтому даже добавление простого огромного сообщения, заполненного случайными байтами, нетривиально. 🙂

0

Решение

Вы можете изменить размер внутренних буферов, используемых recv() а также send() используя setsockopt() с флагом SO_RCVBUF для recv() буфер и с флагом SO_SNDBUF для send() один.

Вы можете найти пример Вот.

РЕДАКТИРОВАТЬ : Вы можете отключить алгоритм Nagle. В этом случае взгляните на отметкаэто ответ.

EDIT2: подобно алк сказал в комментарии, важно изменить размер буфера перед любым вызовомaccept() или же connect(),

5

Другие решения

Если вы также управляете отправляющей стороной, вы можете отключить алгоритм Nagle и отправлять любые размеры по вашему желанию (без накопления записи) …

int flag = 1;
setsockopt( handle, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int) );
3

По вопросам рекламы [email protected]