Установка 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()
, Так, может быть, это можно установить, но не восстановить? Я думаю, попробуйте и посмотрите, работает ли он.