当使用带有错误对象的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和同步。
答案 0 :(得分:0)
write
上的文档说它会引发错误。您的代码中的问题是您在error
内声明了try
变量 。在文档中,它说错误变量被设置为指示出现了什么错误。尝试在error
块之外声明try
变量。
修改强>
经过一番评论后,这是对的。一些write
重载不会抛出。然后,这里的问题可能在于其他事情,例如缓冲区或套接字指针。看看你得到的确切异常会很有趣。
答案 1 :(得分:0)
write()没有抛出异常。稍后调用从端点获取远程IP(在客户端关闭/关闭套接字之后),这就是抛出这个:传输端点没有连接Exception Type: N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_6system12system_errorEEEEE
。所以这就是那个谜团的终结。仍然不知道为什么错误不会在写入时设置...写入似乎没有失败。