用asyncscoket的connect来连接一个虚假的没有的域名或IP地址时
程序会停止响应几秒钟这个该怎么解决
以前用VB的mssocket连接的时候也没有出现这个问题
我不太懂什么同步/异步
但我想也许跟这个有关系有什么好的解决办法吗
难道另开一个线程来连接?

解决方案 »

  1.   

    查了些资料
    好象涉及的挺多
    异步/同步
    阻塞/非阻塞似乎socket在发送一个连接函数时都会发生阻塞情况有三种解决方法1,放到一个自己写的线程中
    2,使连接函数立刻返回 另一个函数轮询此套接字
    3,使连接函数立刻返回 请求完成的同时发送一条windows消息我觉得采用2,3条可以但是如果使连接函数立刻返回呢
    如果进行后面的轮询或发送windwos消息的操作呢
      

  2.   

    你可以用CAsyncSocket(都封装好了的。想看实现也有代码)。
    异步连接会立刻返回,连接完成后会发送FD_CONNECT并触发OnConnect函数。
      

  3.   

    怎么我感觉
    CAsyncsocket是阻塞的呢
    用CAsyncsocket的connect函数时(create的时候 用的是FD_CONNECT)程序会挂起呢
    直到连接到指定IP或连接不上时程序才恢复呢
      

  4.   

    很头疼的问题现在又有了新的发现Asyncsocket在连接虚假的IP时到是非阻塞但在连接虚假的域名时 程序就会挂起
    直到连接不上返回结果 程序才恢复
      

  5.   

    好像GetPeerName()在一些情况下会阻塞,你看看有没有使用
      

  6.   

    可能是你连域名的时候会先从DNS获取对应的IP,这个操作需要一定的时间并且阻塞(如果对应域名不存在可能会尝试多个 DNS服务器)所以卡住。
    所以域名解析放在其他地方做,连的时候就只用IP连。
      

  7.   

    CAsyncSocket当然是异步的,无论成功与否,它都应该立刻返回,如果你程序停顿在那,一定另有原因至于不存在的域名地址,连接成功或者失败信息最长2分钟后才能回来,这是已知问题。不过你为什么会连不存在的域名?不管怎么说,CAsyncSocket::Connect都是立刻返回的,不会停顿在那,除非你用法有错误
      

  8.   

    呵呵.你连接域名时,你要先将域名解析为IP,才能连接的.将域名解析为IP,可以用
    gethostbyname(),这个是阻塞的API;也可以用WSAAsyncGetHostByName(),这个是异步非阻塞的.