クレイジーに聞こえるかもしれませんが、MSS などの TCP スタック パラメータを手動で構成する必要がある場合があります。
たとえば、ここで説明されているように、マシン全体で実行できることがわかります。しかし、tcp ソケットごとに設定する方法が必要です。
それは標準setsockopt
である必要がありますTCP_MAXSEG
。これは、接続が開始される前 (つまり、connect
またはの前listen
) に実行する必要があることと、TCP スタックがパス MTU に従って実際の値を変更する可能性があることを覚えておいてください。
このMSDN記事setsockopt()
の下部にあるように、TCP_MAXSEGを使用して呼び出すことができます。しかし、奇妙なことに、TCP_MAXSEGはに提供する有効なoptnameではありません。それで、多分それは設定することができますが、取得することはできませんか?私はそれを試してみて、それが機能するかどうかを確認すると思います。getsockopt()
Windows では、ソケットごとに MSS を調整できない可能性があると思います。
テスト サンプルは次のとおり
です。setsockopt
TCP_MAXSEG
#include <ws2tcpip.h>
`int mss = 512;`
`setsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, (char*)&mss, sizeof(mss);`
connect
またはの前に設定しlisten
ます。
Windows10のvs2015でテストしました。このコードは VS2015 でコンパイルに合格できますが、実行できません。WindowsWSAENOPROTOOPT
の実行中にエラーが発生します。