2
我知道boost ASIO有一个socket选项来启用tcp keep-alive,但是我怎样才能将它设置为一个特定的值?如何使用Boost ASIO将TCP Keep Alive设置为特定值?
如果不通过Boost定义的类型,也许我可以得到套接字句柄并使用posix setsocketopt()调用设置选项?
我知道boost ASIO有一个socket选项来启用tcp keep-alive,但是我怎样才能将它设置为一个特定的值?如何使用Boost ASIO将TCP Keep Alive设置为特定值?
如果不通过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,你可以定义保持活动超时间隔和全系统。
如果socket是boost :: asio :: ip :: tcp :: socket类型,请使用socket.native()。 – Hill 2016-05-20 01:54:29
尽管'socket.set_option(boost :: asio :: socket_base :: keep_alive(true))'这个'WSAIoctl()'调用在我的Windows 7 PC中不起作用。 – Hill 2016-05-20 02:02:30