设为首页 加入收藏

TOP

TCP中异常关闭链接的意义(三)
2014-07-19 22:51:51 来源: 作者: 【 】 浏览:182
Tags:TCP 异常 关闭 链接 意义
TCP中异常关闭链接的意义 异常关闭的情况_<a href=http://www.cppentry.com/list.php?fid-45-page-1.htm style=text-decoration:underline;font-size:14px;color:#F70968; target=_blank>C语言</a>教程_<a href=http://www.cppentry.com style=text-decoration:underline;font-size:14px;color:#F70968; target=_blank>C++</a>教程_<a href=http://www.cppentry.com/list.php?fid-45-page-1.htm style=text-decoration:underline;font-size:14px;color:#F70968; target=_blank>C语言</a>培训_<a href=http://www.cppentry.com style=text-decoration:underline;font-size:14px;color:#F70968; target=_blank>C++</a>教程培训_C/C++频道_中国IT实验室
中国IT实验室C/C++频道
首页资讯动态C语言C++编程C∕C++开发应用VC++C++Builder专题下载博客论坛
您现在的位置: 中国IT实验室 >> C∕C++频道 >> C语言 >> 实例编程 >> 正文

TCP中异常关闭链接的意义 异常关闭的情况

 

  客户端

  1.

  服务器端已经close了Socket,客户端再发送数据

  目的:测试在TCP对端进程已经关闭Socket时,本端进程还未检测到连接关闭的情况下继续向对端发送消息

  结论:第一包可以发送成功,但第二包发送失败,错误码为“10053: An established connection was aborted by the software in your host machine”(Windows下)或“32: Broken pipe,同时收到SIGPIPE信号”(Linux下)错误

  2.

  服务器端发送数据到TCP后close了Socket,客户端再发送一包数据,然后接收消息

  目的:测试在TCP对端进程发送数据后关闭Socket,本端进程还未检测到连接关闭的情况下发送一包消息,并接着接收消息

  结论:客户端能够成功发送第一包数据(这会导致服务器端发送一个RST包 <已抓包验证>),客户端再去Recv时,对于Windows和Linux程序有如下不同的表现:

  Windows客户端程序:Recv失败,错误码为“10053: An established connection was aborted by the software in your host machine”

  Linux客户端程序:能正常接收完所有消息包,最后收到正常的对端关闭消息(这一点与Window下不一样)

  3.

  服务器端在TCP的接收缓冲区中还有未接收数据的情况下close了Socket,客户端再收包

  目的:测试在TCP的接收缓冲区中还有未接收数据的情况下关闭Socket时,对端进程是否正常

  结论:这种情况服务器端就会向对端发送RST包,而不是正常的FIN包(已经抓包证明),这就会导致客户端提前(RST包比正常数据包先被收到)收到“10054: An existing connection was forcibly closed by the remote host”(Windows下)或“104: Connection reset by peer”(Linux下)错误

  总结:

  当TCP连接的对端进程已经关闭了Socket的情况下,本端进程再发送数据时,第一包可以发送成功(但会导致对端发送一个RST包过来):

  之后如果再继续发送数据会失败,错误码为“10053: An established connection was aborted by the software in your host machine”(Windows下)或“32: Broken pipe,同时收到SIGPIPE信号”(Linux下)错误;

  之后如果接收数据,则Windows下会报10053的错误,而Linux下则收到正常关闭消息

  TCP连接的本端接收缓冲区中还有未接收数据的情况下close了Socket,则本端TCP会向对端发送RST包,而不是正常的FIN包,这就会导致对端进程提前(RST包比正常数据包先被收到)收到“10054: An existing connection was forcibly closed by the remote host”(Windows下)或“104: Connection reset by peer”(Linux下)错误

上一页  [1] [2] 

【责编:peter】

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 社区讨论
 博客论点
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇七大主流排序算法时间效率比较 下一篇C rabbitmq-c使用实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)