免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3779 | 回复: 1
打印 上一主题 下一主题

[网络] socket tcp服务宿主程序强制终止后,客户端仍然可以connet到服务的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2012-07-24 22:24 |显示全部楼层
贴出来代码看看!

论坛徽章:
0
2 [报告]
发表于 2012-07-25 21:57 |显示全部楼层
事情可能是这样子的,你调用kill 命令产生一个 值为15的信号(SIGTERM信号) 服务器程序默认情况下是终止程序,这里我猜测你的服务器程序是在子进程里面处理的相关work 也就是你的子进程终止!产生sigchld信号,父进程接受到做出相关处理后继续运行,也就是父进程状态变成 LISING 状态!而对于子进程由于需要终止所以其打开的所有描述符都要关闭!包括已经连接的套接子也是需要关闭的!进而服务器向客户端发送FIN (服务器发送完FIN 状态后状态为FIN_WAIT_1)。客户收到FIN后 机器是需要发送一个ACK的(此时客户端并不知道,但是服务器收到ACK相应后状态调整为FIN_WAIT_2) 所以其继续想服务器发送字符.....当然TCP分节到达服务器时服务器的已连接套接子已经关闭,所以发送RST 给客户端!此时客户端检查到错误后。1.如何关闭描述符重连 则是要给服务器发送一个FIN的,服务器收到后相应一个ACK 并且状态从FIN_WAIT_2 变成 TIME_WAIT. 等待2个2MSL 后变成CLOSED ! 客户端继续连接 父进程 于是 父进程变成SYN_RCVD!

以上是我的一点小分析!希望对您有用!不对之处请指出!谢谢!~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP