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

S/C模式下,SERVER端如何判定某一CLIENT是否已断开(包括非正常断开)?

    来源: 互联网  发布时间:2015-02-07

    本文导语:  RT | 用select     retval = select( sockfd + 1, &rfds, NULL, NULL, &tv );     if( retval )     {         total = ( size_t )read( sockfd, &c, 1 );         if( retval && !total )         {   ...

RT

|
用select
    retval = select( sockfd + 1, &rfds, NULL, NULL, &tv );
    if( retval )
    {
        total = ( size_t )read( sockfd, &c, 1 );
        if( retval && !total )
        {
            // 当select返回> 0但是 read为0,说明客户端强制断开。
        }
     }

|
方法是 用select函数来获取事件,它可以获取断开事件
           但这个方法有个缺点,如果你去手动拔了线,在某些
           操作系统中无法获的该事件(似乎SCO-UNIX无法获得这样情况下的事件
                                     windows2000/XP可以,9X/ME系统不可以)
           (如果对方异常断电后close系统可以知道该事件)
           这个方法普遍使用,可靠性和稳定性高

为避免我上面说的缺点,最好记下对方IP,隔一段时间ping一下它
那可以避免人为把线断了这样的情况,但是可能资源占用较大

|
但有些是检测不倒的
最好使用轮训消息,心跳函数
从协议上保证,这样更完整

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












  • 相关文章推荐
  • Office 2010 Module模式下使用VBA Addressof
  • 在linux下如何在桌面环境下切换到命令行模式,如何在命令行模式切换到桌面模式
  • GOF设计模式简介- 责任链模式
  • linux epoll的ET模式和LT模式的主要区别是什么呢?为什么ET模式一定要用非阻塞socket?
  • 无线网卡工作模式介绍以及如何设置工作模式
  • 用户模式和内核模式
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • IA32架构下,能从保护模式返回实模式吗?
  • java观察者模式概念及相关类介绍
  • 如何从字符模式切换到图形模式?
  • Docker 四种网络模式及网络配置详细介绍
  • 如何从文本模式返回到桌面模式
  • 怎么从图形模式进入文字模式?
  • 如何进入安全模式或console模式
  • 图形模式 和 命令模式 有什么特别的区别吗?
  • 如何从桌面模式切换到文本模式??
  • 开机进入文本模式,怎样启动图形模式?
  • oracle iis7站长之家
  • 不按Esc键,Vim如何从编辑模式切换到普通模式
  • 切换Oracle的归档模式以及非归档模式
  • 我在KDE中选择了TWM模式后,启动那个模式,可是无法返回到KDE界面下,应该怎么操作?


  • 站内导航:


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

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

    浙ICP备11055608号-3