windowsでtosによる優先制御をしたい場合はレジストリを変更する

c#で(というよりもWin32)アプリケーションで変えたtos値はすぐには有効にならない。OS側で許可して初めて変更されるらしい。つまり、こういう順番で制御する。

  • OS側で許可する

OSにて、変更を許可するには
DWORD型で以下を0に設定する
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableUserTOSSetting
Disableを無効にする、という感じらしい。

  • ソース側にてtosによる優先制御を設定する

.net framework のSocketオブジェクトにSocketOptionName 列挙体のTypeOfServiceを設定する、こういう感じらしい

Socket s = ****(ソケットを取り出す)
// 160を設定
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.TypeOfName, 160);

あとは、wiresharkなどで確認する。

参考にした:
The Cable Guy Windows での QoS のサポート
windows vistaや7の場合はどうなるんだろう?触れてるようで、触れていないのがもどかしい