我知道boost ASIO有一个socket选项来启用tcp keep-alive,但是如何将它设置为特定值?
如果没有通过Boost定义的类型,也许我可以使用posix setsocketopt()调用获取套接字句柄并设置选项?
答案 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上,您都可以在系统范围内定义保持活动超时和间隔。