Установка MSS для каждого сокета с помощью winsock? - PullRequest
2 голосов
/ 09 ноября 2010

Как бы безумно это ни звучало, в жизни бывают ситуации, когда нужно вручную настроить параметры стека TCP, например MSS.

Я вижу, что это можно сделать в масштабе всей машины, как описано, например, здесь .Но мне нужен способ настроить его для каждого сокета TCP-сокета.

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

Это должно быть стандартным setsockopt с TCP_MAXSEG.Просто помните, что это должно быть сделано до того, как будет установлено соединение (то есть до connect или listen), и что стек TCP может изменить фактическое значение в соответствии с MTU пути.

0 голосов
/ 28 ноября 2016

Я думаю, что Windows может не позволить вам настроить MSS для каждого сокета.

Вот тестовый образец:
Просто позвоните setsockopt с TCP_MAXSEG.
#include <ws2tcpip.h>

`int mss = 512;`  
`setsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, (char*)&mss, sizeof(mss);`  

Установите его раньше connect или listen.

Я проверил это с vs2015 на windows10. Этот код может пройти компиляцию в VS2015, но не может работать. Windows выдаст ошибку WSAENOPROTOOPT при запуске.

0 голосов
/ 09 ноября 2010

Вы можете попробовать позвонить setsockopt() с TCP_MAXSEG, как это предполагается в нижней части этой статьи MSDN . Но что странно, так это то, что TCP_MAXSEG не является допустимым опциональным именем для getsockopt(). Так, может быть, это можно установить, но не восстановить? Я думаю, попробуйте и посмотрите, работает ли он.

...