socket编程,客户端连接到服务段以后,由于某些原因连接会断开,那么需要重新连接,怎么样能够得到连接的状态,看是否需要重新连接呢?
谢谢!

解决方案 »

  1.   

    read(socket,...)返回0说明连接断开。
      

  2.   

    read?
    receive吧
    这不行,如果没有数据可读,岂不BLOCK掉了
    不行
      

  3.   

    setsockopt(ursocket,SOL_SOCKET,SO_KEEPALIVE ,...);
    要不自己写个ping包。:)
    或者调用iphlpapi.dll的输出函数GetTcpTable;函数原型如下:
    typedef DWORD (WINAPI *GetTcpTableFun)(PMIB_TCPTABLE,PDWORD,BOOL);
      

  4.   

    能不能说明白点
    我试过getsockopt,结果我根本没有连接成功,但是使用so_keepalive仍然返回true。
      

  5.   

    一但建立了连接,只要你不close断开!我觉得是应该一直连接的吧!
      

  6.   

    当你的客户端连接到服务器以后,调用SetSockOpt()函数,其中设置nOptionName为SO_KEEPALIVE,lpOptionValue为true,然后当你想确认你是否还保持和服务器的连接,那么调用getsockopt,你说的“我试过getsockopt,结果我根本没有连接成功,但是使用so_keepalive仍然返回true。”是因为如果一个option从来没有被SetSockOpt设置过的化,那么你用getsockopt得到的永远都只是它的默认值,呵呵就这些了,你再试试 :)
      

  7.   

    void CChatSocket::OnClose(int nErrorCode)
    {
    ASSERT(m_pDlg!=NULL);
    m_pDlg->ChatDisconnect();
    CSocket::OnClose(nErrorCode);
    }这是从我源代码下面copy过来的~!m_pDlg->ChatDisconnect();这段你可以自己改!就是连接断开的时候做什么....