如下代码是我的程序打开Tcp连接的部分。
我希望能够快速的判断出是否能够连接上,马上返回,可是实际上最快要4S钟,最慢的要10多S呢?
求牛人帮忙BOOL CTcpip::Open ()
{
if( 0 == m_dwIpAddress)
{return FALSE;}
         m_nCommunicateFailTimes = 0; struct sockaddr_in server;
int    rval;
unsigned long argp=1;
struct timeval  tv;
fd_set fd;
time_t t1, t2;

     memcpy( &(server.sin_addr),&m_dwIpAddress,sizeof(server.sin_addr) );
     server.sin_port = htons( m_nPort );
     server.sin_family = AF_INET;
 Close();
 if(clisock == NULL)
clisock = socket(AF_INET,SOCK_STREAM,0);
     if (clisock <= 0) 
 { 
          return FALSE;
     }     ioctlsocket( clisock,FIONBIO,&argp );
 SetRecvTimeout();
     
    time (&t1) ;
    t2 = t1 + 1 ; // 1S 最长的connect时间

 while( TRUE ) 
 {
 if( WaitForSingleObject(hCommunicateEnable, 10) == WAIT_OBJECT_0 )
 {break;}
 rval = connect(clisock, (struct sockaddr *)&server, sizeof(server)) ;
 
 if (rval != 0) 
 {
 FD_ZERO( &fd );
 FD_SET( clisock,&fd );
 tv.tv_sec = 0; 
 tv.tv_usec = 500000L;
 if( (rval = select( 0,NULL,&fd,NULL,&tv )) <= 0 ) 
 {

 time(&t1);
 if( t1 > t2)
 {
 Close();
 return FALSE;
 }
 } 
 else 
 {
      return TRUE;     
 }
  } 
 else 
 {
  return TRUE;              
 }
 time(&t1);
 if( t1 > t2)
{
Close();
return FALSE;
 }
 }
 TRACE( _T("Get program exit signal!!\n" ));
 Close();
 return FALSE;
}