繁体   English   中英

使用boost :: asio和boost :: thread时得到“Bad file descriptor”

Got “Bad file descriptor” when use boost::asio and boost::thread

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

int func(boost::asio::ip::tcp::socket &socket)
{
    boost::system::error_code ec;
    socket.write_some(boost::asio::buffer("hello world!"), ec);
    cout << socket.is_open() << endl;
    if(ec)
    {
        cout << boost::system::system_error(ec).what() << endl;
    }
    return 0;
}

int main(int argc, char* argv[])
{
    using namespace boost::asio;
    io_service iosev;
    ip::tcp::acceptor acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), 1000));

    while(1)
    {
        ip::tcp::socket socket(iosev);
        acceptor.accept(socket);
        boost::thread t = boost::thread(func, boost::ref(socket));
    }
    return 0;
}

我想要一个新线程处理新连接。 但是在函数“func”中,套接字没有打开,我得到了“Bad file descriptor”。 我在文档和Web中阅读了一些示例,但它们是异步的。 我认为这对我的简单要求没有必要。

我该如何修复错误? 任何帮助表示赞赏

1 个回复

您的套接字是一个临时对象,您将一个reffence传递给它,但该对象超出了范围并在线程处理之前被销毁。 使用shared_ptr<socket>或将它们保存在容器中。

2 错误使用boost :: asio和boost :: thread

我正在使用boost :: asio和boost :: thread来实现一个接受消息的消息服务,如果没有正在处理的消息,则异步发送它们,或者如果正在处理消息,则将消息放入队列 。 在我看来,消息速率很高,大约每秒2.000条消息 。 尽管有这么多消息,但我很少遇到损坏的消息。 在2. ...

8 boost :: asio和send()的使用

当使用boost::asio::ip::tcp:socket ,可以使用许多方法来编写/发送数据。 还有asio :: write将套接字作为参数等。我的问题是在使用标准的send()函数时是否存在与boost asio库的兼容性问题(陷阱)? 如果一个人绝对不会在boost::asio ...

9 通过boost :: thread使用boost :: lambda

我在Boost的线程中使用lambda时遇到问题。 该代码应将函数(字符串)的结果放置在向量的指定索引内。 我将如何在这里使用Boost :: lambda? 请不要提及使用c ++ 11语法。 我被迫使用的系统无法支持c ++ 11的编译器。 谢谢! ...

10 使用boost :: asio :: streambuf

寻找一个boost :: asio(以及自己的提升)决定编写异步服务器。 要存储传入的数据,我使用boost :: asio :: streambuf。 我有一个问题。 当我从客户端收到第二条消息后,我发现缓冲区中包含来自先前消息的数据。 虽然我在输入缓冲区调用Consume方法。 怎 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM