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