比如A,B建立TCP连接。A突然断线,B怎样判断已断开?或者有没有现成的API来检测SOCKET是否有效?新手,呵呵。

解决方案 »

  1.   

    to windcsn:
    我用的就是send一些数据,WSAGetLastError返回WSAENOTSOCK这样方法判断的。
    我想知道有没有好一点的方法to wei801004:
    你很幽默^_^
      

  2.   

    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (sock == INVALID_SOCKET)
    {
      //bao cuo
    }
      

  3.   

    if m_Socket == INVALID_SOCKET) 
    。。
      

  4.   

    to Delphityro:
    是已连接,A突然断线。我没描述清楚。-_-!
      

  5.   

    这种不规则的断网判断(即没有调用close()函数),问题目前最好的办法就是用“心跳包”来解决。即在双方建立连接成功以后,除了主通讯通道以外,再建立另一个通道(即另一个线程),每隔一定时间与对方通讯一次,如果通讯成功就证明通道是畅通的,如果通讯不成功,就证明断线了。
      

  6.   

    这没用的,
    TCP协议在没有数据传输的时候是静默的,不发送任何包,
    所以测试SOCKET是错误的,
    目前的解决办法只有依靠应用协议层的心跳包来解决,
    但是记住不要使用TCP协议里的心跳,否则你的SERVER怎么死都不知道,因为最少要2个小时确认一次
      

  7.   

    如果断开,会发送FD_CLOSE消息