2
私はboost ASIOにtcp keep-aliveを有効にするソケットオプションがあることを知っていますが、どのようにして特定の値に設定できますか?Boost ASIOを使用してTCP Keep Aliveを特定の値に設定するにはどうすればよいですか?
Boostで定義されたタイプではない場合は、おそらくソケットハンドルを取得してposix setsocketopt()を使用してオプションを設定できますか?
私はboost ASIOにtcp keep-aliveを有効にするソケットオプションがあることを知っていますが、どのようにして特定の値に設定できますか?Boost ASIOを使用してTCP Keep Aliveを特定の値に設定するにはどうすればよいですか?
Boostで定義されたタイプではない場合は、おそらくソケットハンドルを取得してposix setsocketopt()を使用してオプションを設定できますか?
キープアライブには2つの部分があります。まず、デフォルト値で有効にすることができます。第2に、生存間隔とタイムアウトを設定することができます。
最初の部分については、これを使用することができます。
unsigned long val = 1;
int res = setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&val, sizeof val);
キープアライブパラメータは、POSIXに設定することはできません。ただし、Windows上では、次のように行うことができます。
tcp_keepalive alive;
alive.onoff = TRUE;
alive.keepalivetime = 60000;
alive.keepaliveinterval = 1000;
int bytes_ret=0;
res = WSAIoctl(socket, SIO_KEEPALIVE_VALS, &alive, sizeof(alive), NULL, 0,
&bytes_ret, NULL, NULL);
両方をWindowsとLinuxあなたにキープアライブタイムアウトとインターバルシステム全体を定義することができます。
ソケットの場合はboost :: asio :: ip :: tcp :: socket型ですが、socket.native()を使用してください。 – Hill
この 'WSAIoctl()'呼び出しは、Windows 7のPCで 'socket.set_option(boost :: asio :: socket_base :: keep_alive(true))'が動作していなくてもうまく動作します。 – Hill