ACG狂人

其实我更爱姐汁...

boost::asio网络传输错误码的一些实验结果(recv error_code)

错误码很重要,可以由此判断网络连接到底发生了神马事情,从而驱动高层逻辑的行为。只有笼统的错误码判断的网络层是不够规范的,鄙人觉得有些错误码还是需要在网络层就区分开的,特此记录一些当前实验的错误码以及发生原因。

以下是一部分在async_receive()的handler处捕获到的比较有用的错误码
错误码(十进制) 枚举 发现原因
10009 boost::asio::error::bad_descriptor 在一个已经关闭了的套接字上执行async_receive()
995 boost::asio::error::operation_aborted 正在async_receive()异步任务等待时,本端关闭套接字
10054 boost::asio::error::connection_reset 正在async_receive()异步任务等待时,远端的TCP协议层发送RESET终止链接,暴力关闭套接字。常常发生于远端进程强制关闭时,操作系统释放套接字资源。
2 boost::asio::error::eof 正在async_receive()异步任务等待时,远端关闭套接字,这里跟10054发生的情况似乎一样,但是实际上应该是有区别的,具体神马区别,由回复中jack的说法,这个是远端正常关闭套接字。
只是一些浅陋的测试,目前觉得有用的也就是这几个,不正确的地方请送我鸡蛋。

posted on 2011-05-06 18:06 酿妹汁 阅读(18490) 评论(5)  编辑 收藏 引用 所属分类: C++

评论

# re: boost::asio网络传输错误码的一些实验结果(recv error_code) 2011-05-22 11:17 jackarain

10054 和 2的区别.
2 一般是经过4次握手, 正常tcp断开连接.
10054 一般是对方直接关闭程序, 由操作系统的tcp协议栈简单的发出RESET消息, 中国的GFW也常常模拟此操作中断一些正常连接.
  回复  更多评论   

# re: boost::asio网络传输错误码的一些实验结果(recv error_code) 2011-05-31 12:37 Zu

boost::asio::error::connection_refused 的值是10061,不是10054,我用的是boost 1.46
请查实  回复  更多评论   

# re: boost::asio网络传输错误码的一些实验结果(recv error_code) 2011-05-31 12:43 Zu

刚才忘记说正确的了

10054是boost::asio::error::connection_reset

网上所有转这篇文章的地方都写错了,希望看到我这个回复的人修改一下  回复  更多评论   

# re: boost::asio网络传输错误码的一些实验结果(recv error_code) 2011-07-06 17:58 酿妹汁

@Zu
晕...确实,搞错了枚举常量,已经更改,多谢多谢  回复  更多评论   

# re: boost::asio网络传输错误码的一些实验结果(recv error_code)[未登录] 2015-03-19 18:05 Fly

我想问一下,在连接被不正常关闭之后 需要调用 socket.close() 或者 shutdown吗?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理