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

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

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


person NoSenseEtAl    schedule 26.08.2013    source источник


Ответы (2)


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

Пример можно найти здесь.

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

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

person nouney    schedule 26.08.2013
comment
Я считаю примечательным, что изменение размера буфера сокета должно применяться до того, как любой вызов connect() или accept() вступит в силу. - person alk; 26.08.2013

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

int flag = 1;
setsockopt( handle, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int) );
person mark    schedule 26.08.2013