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



对错误对象使用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没有设置。我错过了什么愚蠢的东西?

关于write的文档说它会抛出错误。代码中的问题是您在 try中声明了error变量。在文档中,它说设置了error变量来指示发生了什么错误。尝试在try块之外声明error变量。

编辑

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

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

最新更新