多谢

解决方案 »

  1.   

    #include <winsock.h>原型int select(
    int nfds,
    fd_set* readfds,
    fd_set* writefds,
    fd_set* exceptfds,
    const struct timeval* timeout
    );nfds:本参数忽略,仅起到兼容作用。
       readfds:(可选)指针,指向一组等待可读性检查的套接口。
       writefds:(可选)指针,指向一组等待可写性检查的套接口。
       exceptfds:(可选)指针,指向一组等待错误检查的套接口。
       timeout:select()最多等待时间,对阻塞操作则为NULL。
    http://yingfeng7926yueyue.spaces.live.com/blog/cns!CEADD079FE6BD9D9!144.entry
      

  2.   

    如果是正常断开那可能通过select捕获到,但是如果是非正常断开,那就需要用心跳机制来判断了,所以最好还是加上心跳机制,客户端定时发送心跳信息,如果收不到则认为是断开了。
      

  3.   

    心跳包
    或者
    keepalive属性设置
      

  4.   

    每隔1分钟通讯一次,接收方如果连续两分钟没有接收到则已经断开,如果是发送方则更简单,发送失败即为断开。
    呵呵,即使是微软公司的DCOM通讯也是采用定时发送通讯包的,应该是没有其他的办法了
      

  5.   

    当服务器端正常断开连接后,客户端的OnReceive()会收到服务器发送的FD_CLOSE消息,据此判断一下就ok了
      

  6.   

    定时ping一次,查看是否可以连接也可以。ping的代码参见http://blog.csdn.net/biweilun/archive/2009/05/04/4149950.aspx
      

  7.   

    可以用select FD_READ,返回0表示正常关闭,返回-1,表示出错关闭
    或者发心跳包参考