gpt4 book ai didi

c++ - boost::asio set_option 错误

转载 作者:太空狗 更新时间:2023-10-29 21:47:37 25 4
gpt4 key购买 nike

我有一个简单的boost::asio::ip::tcp::acceptor,它几乎什么都不做——它在无限循环中接受连接。然后,我有多个连接器同时运行,试图连接...

pSocket->async_connect(endpoint, 
[=](boost::system::error_code error)
{
if(!error)
{
boost::asio::ip::tcp::no_delay noDelay(true);
pSocket->set_option(noDelay, error);
assert(!error);
std::cout << error.message() << '\n'; // "An invalid argument was supplied"
}
});

一切都在无限循环中运行,我正在运行 2 个客户端和 1 个服务器,所有环回连接。一段时间后(数百次成功的连接和断开连接),当在连接的套接字上设置 no_delay 选项时,我收到错误消息 An invalid argument was supplied

在什么情况下在套接字上设置选项会导致此错误?有没有人以前见过这种情况,并且知道它为什么会发生和/或解决它的方法?

更新:如果我将设置 set_option 更改为...

do
{
pSocket->set_option(noDelay, error);
} while(error);

...它会成功 - 通常在失败后的第二次尝试中。

最佳答案

昨天我一步一步调试set_option,问题是set_option使用了io_service_impl对象但是它包含了错误的套接字指针,这就是它崩溃的原因。但是在创建套接字时没有设置这个套接字,所以我认为你不能以这种方式在套接字上设置选项。

你必须在 set_option 之前打开套接字,在 async_connectset_option 之前试试这个:

sock->open(boost::asio::ip::tcp::v4());

错误称为 Bad file descriptor,它直接针对 set_option 调用中未初始化的套接字。

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

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