boost :: asio set_option错误

时间:2012-10-11 16:49:42

标签: c++ networking boost boost-asio

我有一个简单的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);

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

1 个答案:

答案 0 :(得分:2)

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

您必须在set_option之前打开套接字,在async_connectset_option之前尝试此操作:

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

错误称为Bad file descriptor,它在set_option调用上指向未初始化的套接字。