要么放个timer来计时,超过就close

解决方案 »

  1.   

    可以通过一个API直接设置沿时就可以了,好象是SetOpt什么的!你查MSDN肯定有的!
      

  2.   

    能不能具体一些?timer好像不行,因为connect是阻塞的!!好象setsockopt可以,不知道具体应该怎样用?好像用SO_TTL的选项?
      

  3.   

    用CAsyncSocket自己处理OnConnect()就ok了.
      

  4.   

    我的客户端程序connect()到一个10.0.0.1的时候,connect就阻塞在那里,好像很长时间都不返回?我应该怎样设置超时?
      

  5.   

    我觉得用CAsyncSocket 的生成类好一些,
    CSocket好像自己内部封装的线程有问题,
    经常会死机,用CAsyncSocket是非阻塞,
    ::OnConnect()处理连接,设个timer计时
    就好了。setsockopt()也可以设的,但
    有时候还是会死机。
      

  6.   

    我就想知道如何用socket的api函数设,如setsockopt里面的选项,可是我现在很急呀,我没用mfc的类,这个问题应该很常见的呀!
      

  7.   

    ok,setsockopt例子如下;int rcvtimeo = 30000 ; // 30 sec insteadof 45 as default
    setsockopt( s , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) );
      

  8.   

    不对,SO_RCVTIMEO 只影响write recv等等, 跟connect无关!
      

  9.   

    去www.vchelp.net看看,里面好像有一个源程序:可设置连接时限的套接字类(名字记不清楚了),在规定的时间内连接服务器不上就会返回。
    不过我在自己的程序中用了一下,第一次能很快返回,但以后仍要75秒左右。
      

  10.   

    CurrentTime = GetTickCount();
      

  11.   

    看看windows网络编程这本书吧。一般来说,用套接字api直接connect的时候,线程或者进程是阻塞的,这个时候很难响应OnTimer消息,所以用设Timer的方法是行不通的。setsocketopt也没有什么用。一个方法是强制将阻塞套接字转为非阻塞方式,然后再判断connect的返回值,如果为WSAEWOULDBLOCK就等,直到30秒。最后再将套接字转为阻塞方式。但是这种方法我试过,好象也行不通。因为总是返回上述错误码,根本就没有成功的机会。此外的方法是利用select函数进行控制,我没有试过,但你可以试一下,如果调通了告诉我一声。具体的源码好象在windows网络编程这本书上。
      

  12.   

    我同意zhang_qxian(blueman2001)的说法,我在unix下就是这样调通可以定制n秒连接不上就返回,但是nt下我用IOCtl() 将socket强制设成非阻塞的,但是调用connect()仍然要等默认的时间才返回失败,按照道理应该是无论连接成功与否都立即返回,在根据返回的值进行判断。
    不知道是否用IOCtl()设置非阻塞是否正确,如果不正确应该用什么方法设置为非阻塞。
    this->IOCtl(FIONBIO,(unsigned long*)&l_iFlag);[CSocket类]
      

  13.   

    http://www.codeguru.com/network/CTimeoutSocket.html