gethostbyname()会到DNS服务器取IP,也就是会用到网络,那调用时会阻塞?有一直塞下去的可能么?能非阻塞调用么?

解决方案 »

  1.   

    我编过一些网络程序,从没遇到过调用gethostbyname会阻塞的情况
    如果没有错误发生,gethostbyname()返回一个指向hostent结构的指针,否则,返回一个空指针。
    按照你说的,可能会发生如下错误:
    错误代码列表:
    WSANOTINTIALISED 在应用这个API前,必须成功地调用WSAStartup()。
    WSAENTDOWN Windows Sockets实现检测到了网络子系统的错误。
    WSAHOST_NOT_FOUND 没有找到授权应答主机。
    WSATRY_AGAIN 没有找到非授权主机,或者SERVERFAIL。
    WSANO_RECOVERY 无法恢复的错误,FORMERR,REFUSED,NOTIMP。
    WSANO_DATA 有效的名字,但没有关于请求类型的数据记录。
    WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行。
    WSAEINTR 阻塞调用被WSACancelBlockingCall()取消了.
      

  2.   

    不会阻塞?难道到DNS上解析域名的操作可以瞬间完成?
      

  3.   


    非阻塞的异步API,不是马上完成,是马上返回是否成功调用这个API的结果,然后调用完后,再将结果以消息模型发送给你程序窗口.那么这个API可以理解为在"后台悄悄的工作",期间你可以执行其它操作,不象阻塞那样要一直在等它完成后才能执行下一条语句.GetHostByname是有异步版本的,WSAAsyncGetHostByName()
      

  4.   

    该函数会阻塞,比如i=0;
    while(i<100) {
    gethostbyname("www.sohu.com");
    printf("%d\n", i);  //中间肯定要卡住几次
    }但可以设置超时