2012-01-31 581 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

相關問題