用Winsocket的connect函数实现连接数据库,但是置连接超时怎么实现?

解决方案 »

  1.   

    int setsockopt (
      SOCKET s,                 
      int level,                
      int optname,              
      const char FAR * optval,  
      int optlen                
    );
     
      

  2.   

    我记得connect 的超时设置是没法用setsockopt来设置的,所以以前写了这样的代码实现,
    DWORD dwWaitRes = WSA_WAIT_FAILED;
    ATLVERIFY(WSAResetEvent(m_hEvent));
    //ioctlsocket(sckSocket, FIONBIO, &arp); // 进入none-blocking mode
    // WSAEventSelect()会自动将socket设置为none-blocking方式
    // 因此,不需要再调用ioctlsocket来设置
    ATLVERIFY(WSAEventSelect(sckSocket, m_hEvent, FD_CONNECT) == 0); // 连接服务器
        if (connect(sckSocket,(const struct sockaddr *)&sinServer,sizeof(sinServer))==SOCKET_ERROR 
    && WSAGetLastError() == WSAEWOULDBLOCK)
    dwWaitRes = WSAWaitForMultipleEvents(1, &m_hEvent, TRUE, m_nSendTimeout, FALSE);
    WSAEventSelect(sckSocket, m_hEvent, 0);
    unsigned long arp = 0;
    ioctlsocket(sckSocket, FIONBIO, &arp); // 进入blocking mode这段代码在我的程序里是正常工作的
      

  3.   

    Semigod() ,你给出的例子一定有上下文吧?
    能给一个简单点的实用例子吗?