- 2005/09/15 Thu
-
WSAIoctlのSIO_KEEPALIVE_VALSを使えばレジストリを書き換えずにKeepAliveが使用できるばかりかソケット単位で監視周期の設定が可能だというのに、MSDNライブラリはtcp_keepalive構造体の定義を載せるのみでろくな説明がないのでとりあえず試して備忘録。struct tcp_keepalive {u_long onoff;};
u_long keepalivetime;
u_long keepaliveinterval;
onoffがu_longなのがよくわかりませんが、1で有効、0で無効になることは確認。MSTcpIp.hを覗いてみたが特にdefineは切られていない模様。
keepalivetimeとkeepaliveintervalに関してはレジストリに設定する場合と同様か。TcpMaxDataRetransmissionsに該当する項目はありませんね。
あとは対象ソケットとSIO_KEEPALIVE_VALSを指定してlpvInBufferにtcp_keepaliveのポインタ、cbInBufferにsizeof(tcp_keepalive)を渡すだけと。
まぁ、今回のシステムではkeepaliveを使わないと明言されているから関係ないんですけど。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaioctl_2.asp