如何使用Boost ASIO将TCP Keep Alive设置为特定值?

时间:2012-01-31 19:01:02

标签: boost-asio

我知道boost ASIO有一个socket选项来启用tcp keep-alive,但是如何将它设置为特定值?

如果没有通过Boost定义的类型,也许我可以使用posix setsocketopt()调用获取套接字句柄并设置选项?

1 个答案:

答案 0 :(得分:1)

保持活力有两个部分。首先,可以使用默认值启用它。其次,可以设置保持活动间隔和超时。

对于第一部分,您可以使用:

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上,您都可以在系统范围内定义保持活动超时和间隔。