Boost ASIO receive_from如何返回底层套接字错误?

时间:2010-10-10 01:01:46

标签: c++ sockets boost-asio

即。阻止版本会在出错时返回-1。

或者更重要的是,你怎么知道呼叫失败了?确实

boost :: asio :: ip :: udp :: socket :: receive_from()在出错时返回-1

正常的BSD套接字API receive_from调用将在错误时返回-1,您可以查看errno以获取特定的错误代码。升级版本是否也这样做?

好的,我试过像这样传递过载:

while(true){
    boost::system::error_code ec;
    size_t length = socket_.receive_from(
        boost::asio::buffer(buffer, buffer_size), 
        sender_endpoint, ec);

    /// ... other code
}

但是我在编译时遇到了这个错误:

error: no matching function for call to ‘boost::asio::basic_datagram_socket<boost::asio::ipdp, boost::asio::datagram_socket_service<boost::asio::ip::udp> >::receive_from(boost::asio::mutable_buffer, boost::asio::ip::basic_endpoint<boost::asio::ip::udp>&, boost::system::error_code&)’
make: *** [server.o] Error 1

文档是错误的还是我做错了什么? 编辑:不,我错了...抱歉,我有一个时间......这叫做过度劳累!我现在半睡半醒了。我错过了旗帜论点。

1 个答案:

答案 0 :(得分:1)

失败时抛出boost::system::system_error异常。如果您不想处理异常,则会有一个overload参数。