【问题标题】:How do I set TCP Keep Alive to a specific value using Boost ASIO?如何使用 Boost ASIO 将 TCP Keep Alive 设置为特定值?
【发布时间】:2012-01-31 19:01:01
【问题描述】:

我知道 boost ASIO 有一个套接字选项来启用 tcp keep-alive,但我怎样才能将其设置为特定值?

如果不是通过 Boost 定义的类型,也许我可以获取套接字句柄并使用 posix setsocketopt() 调用设置选项?

【问题讨论】:

    标签: boost-asio


    【解决方案1】:

    保持活动有两个部分。首先,可以使用默认值启用它。其次,可以设置保活间隔和超时。

    对于第一部分,您可以使用:

    unsigned long val = 1;
    int res = setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&val, sizeof val);
    

    不能在posix中设置keep-alive参数。但是,在 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()。
    • 尽管socket.set_option(boost::asio::socket_base::keep_alive(true)) 在我的 Windows 7 PC 中无法正常工作,但此 WSAIoctl() 调用仍能正常工作。
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多