当前位置:  技术问答>linux和unix

socket编程,我如何确定与对方的连接是否正常?

    来源: 互联网  发布时间:2015-11-04

    本文导语:  我用socket写一个服务端程序,同时可以接受10个客户连接,但我如何确定与客户端的连接状态是否正常,也就是说我如何确定下面三种情况:对方正常close;对方不正常退出了客户端;与对方连接的网络不正常,网线...

我用socket写一个服务端程序,同时可以接受10个客户连接,但我如何确定与客户端的连接状态是否正常,也就是说我如何确定下面三种情况:对方正常close;对方不正常退出了客户端;与对方连接的网络不正常,网线断或其它问题。
我这样处理:
   ioctl(fd,FIONREAD,&nread) ;
      if(nread == 0)   //对方close
      {
         close(fd) ;
       }
但经常不能正确处理。

|
自己加心跳检测。Linux的TCP协议栈支持心跳检测,具体选项忘了,自己查一下吧。

|
Heartbeat检测,就是定时握手信号。如果连续几次收不到,说明对方已经没有心跳了。

|
发测试帧
比如20秒没有收到数据表示对方退出了

不正常退出情况不少,可以在一些比如Send的返回值小于0时看 error值
如 broke pipe错误都可以得知的

|
定时ack

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • socket 断开连接如何再恢复连接
  • 什么是socket的长连接,以及如何实现长连接,长连接和短连接有什么区别?
  • kjava能不能通过socket连接服务器
  • socket 连接问题(不要见笑)
  • 如何跨网段进行socket连接
  • socket连接建立,收不到告警的情况?netstat结果如下
  • 服务器与客户端建立socket连接,如何获得端口号.谢谢
  • ftp连接出现socket错误=#10054的解决方法
  • 如何清楚linux系统中以退出程序的socket连接?
  • Socket连接的时间不能控制??请帮小妹
  • http连接,服务器端关闭socket
  • 请问javaBean能不能进行非本机的socket连接
  • 200分求问j2me里如何建立socket连接?
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • 一个进程打开的socket长连接能否达到10000个
  • socket怎样限制客户端连接数?
  • 关于LINUX SOCKET连接CPU占用问题
  • SOCKET调用close断开连接的时候回主动发FIN ACK包吗?
  • SOCKET 长连接
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • 博客 iis7站长之家
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3