我知道boost ASIO有一个套接字选项来启用tcp保持活动,但我如何将其设置为特定值?
如果不是通过Boost定义的类型,也许我可以获得套接字句柄并使用posix-setsocketopt()调用设置选项?
有两个部分可以保持活力。首先,可以使用默认值启用它。第二,可以设置保活间隔和超时。
对于第一部分,你可以使用这个:
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上,您都可以在系统范围内定义保持活动超时和间隔。