免费注册 查看新帖 |

Chinaunix

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

讨论:linux 下socket客户端崩溃后连接不上服务器问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-28 17:10 |只看该作者 |倒序浏览
本帖最后由 fantansy 于 2010-10-28 17:16 编辑

最近写一个客户端程序,负责向服务器发送数据,同时也能接收到服务器传来的数据。使用select机制。
  
socket()--->
  connect()--->
设置IP,port--->
然后就是:
     while(1)
         {   
      FD_ZERO(sockfd,&rfds);
              FD_ZERO(sockfd,&wfds);
             FD_SET(sockfd,&rfds);
             FD_SET(sockfd,&wfds);

select(sockfd+1,&rfds,&wfds,&tv);
         
正常情况下,收发数据正常,。但是当客户端断电后重新连接服务器。连接connect正常,却无法发送数据:
现象如下;
1。select 检测到recv可读,但是返回值0,即EOF。
2。select并没检测到send可写,如果我强制send,,返回-1;
3。最奇怪的就是,正常情况下,select返回值应该是1。但此时select返回的是2。
如果此时
1‘。服务器向重启后的客户端发送数据,然后就可以正常接收客户端发来的数据,或者2’服务器关闭,再打开,此后客户端-服务器端也能正常通讯。

我的问题是:怎样在保证不处理服务器端的情况下,保证崩溃后的客户端依然正常向服务器发送数据呢?

欢迎讨论。

论坛徽章:
0
2 [报告]
发表于 2010-10-28 17:15 |只看该作者
不知大家对这种现象有什么高见,,请指教!!

论坛徽章:
0
3 [报告]
发表于 2010-10-28 22:08 |只看该作者
是不是产生了两个连接啊 同时服务端也没有检测客户端是否断开

论坛徽章:
0
4 [报告]
发表于 2010-10-28 22:57 |只看该作者
C的socket不熟哎。不过看你的描述,tcpdump一下码流应该能看出点东西来。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
5 [报告]
发表于 2010-10-28 23:39 |只看该作者
文件描述字太大?
另,可以:
心跳检测
TCP_KEEPLIVE

论坛徽章:
0
6 [报告]
发表于 2010-10-29 08:58 |只看该作者
回复 5# chenzhanyiczy

这个保活机制不太适合我的实际需要,其实可以用通过带外数据发送心跳包《UNX网络编程》21章带外数据有讲。但是是这样的,我手头上有一个单片机,它向服务器发数据,断电后依然可以连接上,“服务器端提示”:有客户端断开,接着才连上。
所以我就在想是不是我写的客户端程序有问题,或者缺少一些考虑呢?

论坛徽章:
0
7 [报告]
发表于 2010-10-29 08:59 |只看该作者
C的socket不熟哎。不过看你的描述,tcpdump一下码流应该能看出点东西来。
小i 发表于 2010-10-28 22:57



    恩。多谢LS的,,我试一下看。

论坛徽章:
0
8 [报告]
发表于 2010-10-29 09:26 |只看该作者
是不是产生了两个连接啊 同时服务端也没有检测客户端是否断开
huxk 发表于 2010-10-28 22:08


对,,好像是这种情况。正常情况下,如果我FD_SET(sockfd,&rfds),FD_SET(sockfd,&wfds),同一个套接字的话,select返回为1才对,但是崩溃后的客户端再连服务器出现了2。

论坛徽章:
0
9 [报告]
发表于 2010-10-29 10:41 |只看该作者
返回2    应该是 socket 出错, 描述符标示为可读和可写   。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP