2012-01-31 7 views
2

私はboost ASIOにtcp keep-aliveを有効にするソケットオプションがあることを知っていますが、どのようにして特定の値に設定できますか?Boost ASIOを使用してTCP Keep Aliveを特定の値に設定するにはどうすればよいですか?

Boostで定義されたタイプではない場合は、おそらくソケットハンドルを取得してposix setsocketopt()を使用してオプションを設定できますか?

答えて

1

キープアライブには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あなたにキープアライブタイムアウトとインターバルシステム全体を定義することができます。

+0

ソケットの場合はboost :: asio :: ip :: tcp :: socket型ですが、socket.native()を使用してください。 – Hill

+1

この 'WSAIoctl()'呼び出しは、Windows 7のPCで 'socket.set_option(boost :: asio :: socket_base :: keep_alive(true))'が動作していなくてもうまく動作します。 – Hill

関連する問題