不是的,只要没连接上,connect()函数就会返回false,ASSERT(connect())看看就知道了

解决方案 »

  1.   

    首先说一点,Socket的返回值不能用TRUE和FALSE来判断,如果错误,返回值是SOCKET_ERROR,由WSAGetLastError得到扩展错误代码。至于你提的问题,CSocket是无法完成的,CAsyncSocket是否可以我不清楚。但Socket API2.0是可以的,在WSAConnect前,调用WSAEventSelect,然后可以针对某一网络事件设置一个Event对象,设置好后,调用WSAConnect,这是这个调用会立即返回的,当然了,这时是没有连上的。你可以用WSAWaitForMultipleEvents等待这一事件的发生,其中dwTimeOUT参数就是用来设置超时的。
      

  2.   

    不管怎么说,connect肯定是会返回的。只不过"对方IP不是合法的或者没开机"时返回时间较长,如果你的程序不能容忍这个延时,就得照sxbyl的方法作,或者使用CAsyncSocket也行!关于这些MSDN的里有例子...
      

  3.   

    ASSERT(connect())肯定是可以的,你所说的GetLastError()也能得到错误代码,但两者是不一样的。而且,CSocket的connect()没连上的话,是有返回的。如果想用异步模式的话,即CAsyncSocket,用钩子函数就可以解决延迟问题了
      

  4.   

    呵呵……快要换话题了。
    当connect()错误时,返回SOCKET_ERROR,即-1,ASSERT(-1)是不会停下来的。当连接成功时,返回0,ASSERT(0)会抛出一个异常,中断在那里,好像这不是你的目的吧?