2012-01-31 579 views

回答

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,你可以定义保持活动超时间隔和全系统。

+0

如果socket是boost :: asio :: ip :: tcp :: socket类型,请使用socket.native()。 – Hill 2016-05-20 01:54:29

+1

尽管'socket.set_option(boost :: asio :: socket_base :: keep_alive(true))'这个'WSAIoctl()'调用在我的Windows 7 PC中不起作用。 – Hill 2016-05-20 02:02:30

相关问题