免费注册 查看新帖 |

Chinaunix

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

问一个socket里面shutdown和close的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-25 17:05 |只看该作者 |倒序浏览
连接是tcp的
程序跑的时候server端在服务结束后,在子线程里面调用shutdown(connfd, SHUT_RDWR)关闭accept产生的socket。
但是最终发现这些socket没有被释放,导致fd溢出。

我改用close关闭socket後,socket就被释放了。

我看了看shutdown和close的描述,了解到shutdown会直接激发关闭序列
如果说client端对关闭序列无响应的话,那么close後为啥socket被释放了呢?
查看过shutdown的返回值,没有错误

由于看不到client的程序代码,也没有tcpdump、netstat之类的工具可以用(不给权限
所以只能抓瞎了

问问大侠们可能是什么原因

PS:如果换成UDP,那么close和shutdown有什么区别吗?
系统是个linux的嵌入式平台

[ 本帖最后由 kuaizaifeng 于 2007-7-25 17:43 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-07-25 17:07 |只看该作者
原帖由 kuaizaifeng 于 2007-7-25 17:05 发表
由于看不到client的程序代码,也没有tcpdump、netstat之类的工具可以用(不给权限 )
所以只能抓瞎了

接个小 HUB 就可以了。再或者装个虚拟机,就可以抓到报文。

论坛徽章:
0
3 [报告]
发表于 2007-07-25 17:17 |只看该作者
原帖由 flw 于 2007-7-25 17:07 发表

接个小 HUB 就可以了。再或者装个虚拟机,就可以抓到报文。


老大,所以的机器上都没有着两个命令的权限
虚拟机我申请了4个月了,还是没有给批

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-07-25 17:30 |只看该作者
原帖由 kuaizaifeng 于 2007-7-25 17:17 发表


老大,所以的机器上都没有着两个命令的权限
虚拟机我申请了4个月了,还是没有给批

晕哦~
你自己安装一个 VMWare,跑一个 client 或者 server,然后在宿主系统中抓包,就可以了啊。
如果因为你的产品比较特殊,无法在虚拟机里安装的话,
就接一个小 HUB,越便宜的越好,利用小 HUB 的广播特性,就可以在另一台机器上抓到报文了啊。

论坛徽章:
0
5 [报告]
发表于 2007-07-25 17:41 |只看该作者
原帖由 flw 于 2007-7-25 17:30 发表

晕哦~
你自己安装一个 VMWare,跑一个 client 或者 server,然后在宿主系统中抓包,就可以了啊。
如果因为你的产品比较特殊,无法在虚拟机里安装的话,
就接一个小 HUB,越便宜的越好,利用小 HUB 的广播 ...


基本上所有的机器上的tcpdump都是禁用的
我觉得helpdesk的脑袋浸水了
现在开发很费劲
搞个测试,包多了点儿,就把网口给禁用了
又不给抓包程序
win下装个东西要申请,结果总是不批准

大哥先给分析下可能是啥原因导致close和shutdown行为不一致的
谢谢了先

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-07-25 17:44 |只看该作者
原帖由 kuaizaifeng 于 2007-7-25 17:41 发表


基本上所有的机器上的tcpdump都是禁用的
我觉得helpdesk的脑袋浸水了
现在开发很费劲
搞个测试,包多了点儿,就把网口给禁用了
又不给抓包程序
win下装个东西要申请,结果总是不批准

大哥先给分析下 ...

我实在受不了你啦~
稍等让我吐口血先,马上回来。













难道你们公司不能自己装系统吗?

论坛徽章:
0
7 [报告]
发表于 2007-07-25 17:50 |只看该作者
close和shutdown的函数功能不一致,close会释放socket,而shutdown只是告诉对方你别发了

论坛徽章:
0
8 [报告]
发表于 2007-07-25 17:51 |只看该作者
原帖由 flw 于 2007-7-25 17:44 发表

我实在受不了你啦~
稍等让我吐口血先,马上回来。













难道你们公司不能自己装系统吗?


我等
哪怕花儿都谢了
自己装系统是绝对不行滴

论坛徽章:
0
9 [报告]
发表于 2007-07-25 17:52 |只看该作者
描述字有一个引用计数. close把描述字的引用计数减1, 仅在该计数变为0时才关闭套接口. 而shutdown可以不管引用计数就激发TCP的正常连接终止序列了.

论坛徽章:
0
10 [报告]
发表于 2007-07-25 17:53 |只看该作者
原帖由 清汤挂面 于 2007-7-25 17:50 发表
close和shutdown的函数功能不一致,close会释放socket,而shutdown只是告诉对方你别发了

shutdown难道不激发FIN等的关闭序列吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP