sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_port=htons(139); 
               severAddr.sin_addr.S_un.S_addr =inet_addr(ppDlg->iplist);

   if(connect(sockfd,(struct sockaddr*)&severAddr,sizeof(severAddr))<0)
{   
  AfxMessageBox("连接不上");
}
 如果不设超时的话,要等近20秒才弹出"连接不上",我现在需要在这代码上添加超时,也就是1秒种连不上,就显示“连接不上”,怎么写超时的代码?

解决方案 »

  1.   

    http://blog.vckbase.com/flowsand/archive/2005/03/11/3473.aspx
      

  2.   

    你要设置成非阻塞的模式,先connect(),然后用select()判断!
      

  3.   

    //连接超时
        //--------------------------------------------------------------------------
        //设置为非阻塞方式连接
        unsigned long ul = 1;
        int ret = ioctlsocket(m_sSocket, FIONBIO, (unsigned long*)&ul);
        if(ret == SOCKET_ERROR)
        {
            err = WSAGetLastError();
      closesocket(m_sSocket);
      m_sSocket = NULL;
      return FALSE;
        } struct         timeval timeout ;  // 超时结构
        fd_set         r;                          FD_ZERO(&r);
        FD_SET(m_sSocket, &r);
        timeout.tv_sec = iTimeout;   // 连接超时设置
        timeout.tv_usec =0;    connect(m_sSocket,(LPSOCKADDR)&server,sizeof(SOCKADDR));
        ret = select(0, 0, &r, 0, &timeout);  
        if ( ret <= 0 )
        {
      err = WSAGetLastError();
      closesocket(m_sSocket);
      m_sSocket = NULL;
      return FALSE;
        } //设回阻塞模式
        ul = 0 ;
        ret = ioctlsocket(m_sSocket, FIONBIO, (unsigned long*)&ul);
        //--------------------------------------------------------------------------
      

  4.   

    可以用WaitSingleObject()设一个超时
      

  5.   

    to bigwave2000():
    为什么不好?我用的就是SAM2002(无味) 的方法。