使用boost :: asio :: write()boost :: system :: error_code永远不会被设置

时间:2011-04-18 21:54:34

标签: c++ boost-asio

当使用带有错误对象的boost :: asio :: write()变体时,错误不会被设置,而是会抛出异常。也许我误解了,我认为这个版本会设置错误,而不是抛出异常:

try{

    boost::system::error_code error;

    size_t iBytesWrit = boost::asio::write(
        *a_socket_ptr,boost::asio::buffer(a_response.getdata()),
        boost::asio::transfer_all(),
        error);

        (A)
        if(error)print error...


}
catch(std::exception &e){

    (B)
    log error...
}

如果通过关闭套接字的客户端导致写入错误,则抛出异常 在这里(B发生,而不是A)。 boost :: system :: error_code根本没有设置。我错过了什么愚蠢的事情?

这是tcp和同步。

2 个答案:

答案 0 :(得分:0)

write上的文档说它会引发错误。您的代码中的问题是您在error内声明了try变量 。在文档中,它说错误变量被设置为指示出现了什么错误。尝试在error块之外声明try变量。

修改

经过一番评论后,这是对的。一些write重载不会抛出。然后,这里的问题可能在于其他事情,例如缓冲区或套接字指针。看看你得到的确切异常会很有趣。

答案 1 :(得分:0)

write()没有抛出异常。稍后调用从端点获取远程IP(在客户端关闭/关闭套接字之后),这就是抛出这个:传输端点没有连接Exception Type: N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_6system12syst­em_errorEEEEE。所以这就是那个谜团的终结。仍然不知道为什么错误不会在写入时设置...写入似乎没有失败。