Установка MSS для каждого сокета с помощью winsock?

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

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

3 ответа

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

Я думаю, что 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, но не может работать. Винда выдаст ошибку WSAENOPROTOOPT когда он работает.

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

Другие вопросы по тегам