免费注册 查看新帖 |

Chinaunix

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

linux下的socket编程怎么关闭不了tcp连接??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-11 00:02 |只看该作者 |倒序浏览
ubuntu 8.10下用C写的socket服务器程序,调用close关闭和客户端的连接,close返回是0,但是tcpdump发现双方都没发fin包,在服务器和客户机上netstat也发现tcp连接一直是established状态,最终只能关掉服务器程序才行……没有专门的客户端程序,服务器程序是处理HTTP的东西,所以客户端直接是IE~~

高手帮下忙~~~

论坛徽章:
0
2 [报告]
发表于 2009-04-11 08:22 |只看该作者

回复 #1 mzpyykk 的帖子

RETURN VALUE
       close() returns zero on success.  On error, -1 is returned, and errno is set appropriately.


0代表关闭正常。

论坛徽章:
0
3 [报告]
发表于 2009-04-11 09:24 |只看该作者
可是双方都不发fin包,tcp连接也一直还是established。这个socket文件描述符我是用fcntl设置了非阻塞的




难道发错版了……

论坛徽章:
0
4 [报告]
发表于 2009-04-11 09:40 |只看该作者
我记得我回答过这个问题,可能是你重复发的太多自己也不记得了

论坛徽章:
0
5 [报告]
发表于 2009-04-11 09:55 |只看该作者
呃~~之前我来问过两个iptables的问题~~~这个没来这里问过……

论坛徽章:
0
6 [报告]
发表于 2009-04-11 11:13 |只看该作者
试试阻塞状态下呢?
另外,能不能把关闭 socket 的代码上下文一起贴出来看一下?
第三个问题,tcpdump 的时候是在两边抓的包还是一边?最好分别在两边抓包

我觉得可能性有几种
1、socket 关闭的方式不对(或者和打开的方式不对有关)
2、非阻塞处理不正确,fcntl 这里的问题,言外之意没阻塞,但也没执行

论坛徽章:
0
7 [报告]
发表于 2009-04-11 12:22 |只看该作者
原帖由 platinum 于 2009-4-11 11:13 发表
试试阻塞状态下呢?
另外,能不能把关闭 socket 的代码上下文一起贴出来看一下?
第三个问题,tcpdump 的时候是在两边抓的包还是一边?最好分别在两边抓包

我觉得可能性有几种
1、socket 关闭的方式不对( ...


代码写的有点长,就不贴了

1、socket的打开就是int conn_fd=accept(listening_fd,...)这样来的,然后就是fork()一个子进程处理发送和接收,关闭socket就是在该子进程结束的时候close(conn_fd)
2、设置非阻塞我有判断过fcntl的返回值,没发现异常,也确实conn_fd调用recv的时候如果没数据是马上返回-1并把errno置为EAGAIN



自己也在继续试。。。。。。下次有这类问题还是发编程版去吧~~~

论坛徽章:
0
8 [报告]
发表于 2009-04-11 13:05 |只看该作者
那我还是给你转过去吧

论坛徽章:
0
9 [报告]
发表于 2009-04-12 21:07 |只看该作者
神奇了,用shutdown(conn_fd,2)居然就可以???有些地方不是说这个跟close没区别了么???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP