gpt4 book ai didi

c++ - 修改 boost::asio::socket::set_option

转载 作者:可可西里 更新时间:2023-11-01 02:48:35 24 4
gpt4 key购买 nike

我需要设置选项 boost::asio::ip::tcp::no_delayboost::asio::socket_base::linger boost::asio::ip::tcp::socket 连接到远程 TCP 服务器。我使用方法 set_option 来毫无问题地实现这一目标。

问题:一旦 io_service run()ing 并且 socket 打开,如果我被要求更改它的选项(即:由于程序配置的更改),我可以在打开套接字的情况下进行吗?我需要在更改选项之前关闭它吗?如果我不关闭它,它会在我脸上爆炸吗?这方面的最佳做法是什么?

我无法在文档中找到与此相关的任何信息。

提前谢谢你。

最佳答案

我做了一些测试。

在从socket set_optionget_option 之前,您必须 打开 .否则,您会收到错误消息“提供的文件句柄无效”。

关闭 socket 并再次打开后,所有选项“返回”默认值。所以每次open后你都需要set_option。我发现最适合我执行此操作的地方是在传递给 async_connect 的回调中。

async_connect 调用示例:

socketPtr->async_connect(endpoint_iter->endpoint(),
boost::bind(&ConnectCallback,
shared_from_this(),
boost::asio::placeholders::error));

回调定义:

void ConnectCallback(const boost::system::error_code& ec)
{
if (!ec)
{
// Set options here
boost::asio::socket_base::linger optionLinger(true, 0);
socketPtr->set_option(optionLinger);

boost::asio::ip::tcp::no_delay optionNoDelay(true);
socketPtr->set_option(optionNoDelay);

// Do what you must with the socket now, for instance async_read_some
socketPtr->async_read_some(boost::asio::buffer(buffer, BUFFER_LENGTH),
boost::bind(&ReadCallback,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
}

关于c++ - 修改 boost::asio::socket::set_option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35154547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com