【发布时间】:2012-01-31 19:01:01
【问题描述】:
我知道 boost ASIO 有一个套接字选项来启用 tcp keep-alive,但我怎样才能将其设置为特定值?
如果不是通过 Boost 定义的类型,也许我可以获取套接字句柄并使用 posix setsocketopt() 调用设置选项?
【问题讨论】:
标签: boost-asio
我知道 boost ASIO 有一个套接字选项来启用 tcp keep-alive,但我怎样才能将其设置为特定值?
如果不是通过 Boost 定义的类型,也许我可以获取套接字句柄并使用 posix setsocketopt() 调用设置选项?
【问题讨论】:
标签: boost-asio
保持活动有两个部分。首先,可以使用默认值启用它。其次,可以设置保活间隔和超时。
对于第一部分,您可以使用:
unsigned long val = 1;
int res = setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&val, sizeof val);
不能在posix中设置keep-alive参数。但是,在 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 上,您都可以在系统范围内定义保持活动超时和间隔。
【讨论】:
socket.set_option(boost::asio::socket_base::keep_alive(true)) 在我的 Windows 7 PC 中无法正常工作,但此 WSAIoctl() 调用仍能正常工作。