免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-24 10:03 |只看该作者 |倒序浏览
1)创建一个tcp server程序
2)client使用connect连接到该sever,不停发包,出错时进行重连
现在我的问题是这样的
A)client已经正常连接且发包
B)使用kill强制杀死server程序
发现
C)client在检测到发送出错,进行重新connect
connect是OK的
此时
D)观察server所在宿主系统的netstat,也可以发现连接信息确实存在,且存在多个连接,共分为两种状态:
(1)SYN_RECV
(2)CLOSE_WAIT
这种现象是否正常,确实是因为强制杀死server程序时,server本身没有关闭socket,感觉和常规的想法有出入,希望大牛给确认下。

论坛徽章:
2
2015年亚洲杯之日本
日期:2015-03-25 11:21:322015亚冠之柏太阳神
日期:2015-07-13 10:36:04
2 [报告]
发表于 2012-07-24 11:21 |只看该作者
是正常的,强制关闭服务器端后,没有对socket进行关闭(调用close关闭socket由内核完成),而客户端不知道服务器端已经关闭了,于是就不断的进行重连

论坛徽章:
0
3 [报告]
发表于 2012-07-24 22:24 |只看该作者
贴出来代码看看!

论坛徽章:
0
4 [报告]
发表于 2012-07-25 17:35 |只看该作者
强制kill进程应该是有一个time_wait状态的

论坛徽章:
0
5 [报告]
发表于 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!

以上是我的一点小分析!希望对您有用!不对之处请指出!谢谢!~~

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-08-20 11:21 |只看该作者
xiyoulaoyuanjia 发表于 2012-07-25 21:57
事情可能是这样子的,你调用kill 命令产生一个 值为15的信号(SIGTERM信号) 服务器程序默认情况下是终止程序 ...


多谢xiyoulaoyuanjia的解析,我来论坛比较少,没能及时表示感谢,抱歉。

这种情况对于linux确实是正常的,但是不正常的是后续出现错误

Bind error: Address already in use
启动的服务所用的端口已经被打开,对于我们的嵌入式系统,唯一的原因在于程序异常出错退出,再次重启时无法再次绑定该端口。
已经使用了
int on = 1, status;
status = setsockopt(*phSockFD, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
来设置,具体原因不详。。。

要学的还很多啊。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP