WSAAsyncGetHostByAddr()

编辑:调运网互动百科 时间:2020-04-08 15:52:11
编辑 锁定
本词条缺少信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
WSAAsyncGetHostByAddr()函数是gethostbyaddr()的异步版本,是用来获取对应于一个网络地址主机名和地址信息。Windows Sockets的实现启动该操作后立刻返回调用方,并传回一个异步任务句柄,应用程序可以用它来标识该操作。当操作完成时,结果(若有的话)将会拷贝到调用方提供的缓冲区,同时向应用程序的窗口发一条消息。

目录

  1. 1 简介
  2. hWnd
  3. wMsg
  4. addr
  1. len
  2. type
  3. buf
  4. buflen
  1. 2 注释
  2. 3 参见

WSAAsyncGetHostByAddr()简介

编辑
获得对应于一个地址的主机信息.-异步版本.
#include <winsock.h>
HANDLE PASCAL FAR WSAAsyncGetHostByAddr (HWND hWnd,
unsigned int wMsg,const char FAR * addr,int len,int
type,char FAR * buf,int buflen);

WSAAsyncGetHostByAddr()hWnd

当异步请求完成时,应该接收消息的窗口句柄.

WSAAsyncGetHostByAddr()wMsg

当异步请求完成时,将要接收的消息.

WSAAsyncGetHostByAddr()addr

主机网络地址指针.主机地址以网络字节次序存储.

WSAAsyncGetHostByAddr()len

地址长度.对于PF_INET来说必须为4.

WSAAsyncGetHostByAddr()type

地址类型,必须是PF_INET.

WSAAsyncGetHostByAddr()buf

接收hostent数据的数据区指针.注意该数据区必须大于hostent结构的大小.这是因为不仅Windows Sockets实现要用该数据区域容纳hostent结构,hostent结构的成员引用的所有数据也要在该区域内.建议用户提供一个MAXGETHOSTSTRUCT字节大小的缓冲区.

WSAAsyncGetHostByAddr()buflen

上述数据区的大小.

WSAAsyncGetHostByAddr()注释

编辑
本函数是gethostbyaddr()的异步版本,是用来获取对应于一个网络地址的主机名和地址信息.Windows Sockets的实现启动该操作后立刻返回调用方,并传回一个异步任务句柄,应用程序可以用它来标识该操作.当操作完成时,结果(若有的话)将会拷贝到调用方提供的缓冲区,同时向应用程序的窗口发一条消息.
当异步操作完成时,应用程序的窗口hWnd接收到消息wMsg. wParam参数包含了初次函数调用时返回的异步任务句柄.lParam的高16位包含着错误代码.该代码可以是winsock.h中定义的任何错误.错误代码为0说明异步操作成功.在成功完成的情况下,提供给初始函数调用的缓冲区中包含了一个hostent结构.为存取该结构中的元素,初始的缓冲区指针应置为hostent结构的指针,并一如平常地存取.
注意若错误代码为WSAENOBUFS,它说明在初始调用时由buflen指出的缓冲区大小对于容纳所有的结果信息来说太小了.在这种情况下,lParam的低16位含有提供所有信息所需的缓冲区大小数值.如果应用程序认为获取的数据不够,它就可以在设置了足够容纳所需信息的缓冲区后,重新调用WSAAsyncGetHostByAddr().(也就是大于lParam低16位提供的大小.)
错误代码和缓冲区大小应使用WSAGETASYNCERROR和WSAGETASYNCBUFLEN宏从lParam中取出.两个宏定义如下:
#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
使用这些宏可最大地提高应用程序源代码的可移植性.
返回值:
返回值指出异步操作是否成功地初启.注意它并不隐含操作本身的成功或失败.
若操作成功地初启,WSAAsyncGetHostByAddr()返回一个HANDLE类型的非0值,作为请求需要的异步任务句柄.该值可在两种方式下使用.它可通过WSACancelAsyncRequest()用来取消该操作.也可通过检查wParam消息参数,以匹配异步操作和完成消息.
如果异步操作不能初启,WSAAsyncGetHostByAddr()返回一个0值,并且可使用WSAGetLastError()来获取错误号.
评价:
Windows Sockets的实现使用提供给该函数的缓冲区来构造hostent结构以及该结构成员引用的数据区内容.为避免上述的WSAENOBUFS错误,应用程序应提供一个至少MAXGETHOSTSTRUCT字节大小的缓冲区.
关于Windows Sockets提供者的说明:
Windows Sockets的实现应保证消息能成功地传给应用程序.如果PostMessage()操作失败,Windows Sockets的实现必须重发该消息-只要窗口存在.
Windows Sockets的提供者在消息中组织lParam时应使用WSAMAKEASYNCREPLY宏.
错误代码:
在应用程序的窗口收到消息时可能会设置下列的错误代码.如上所述,它们可以通过WSAGETASYNCERROR宏从应答的消息lParam中取出.
WSAENETDOWN WINDOWS SOCKETS实现已检测到网络子系统故障.
WSAENOBUFS 可用的缓冲区空间不足或没有.
WSAHOST_NOT_FOUND 未找到授权应答主机.
WSATRY_AGAIN 未找到非授权应答主机,或SERVERFAIL.
WSANO_RECOVERY 不可恢复性错误,FORMERR,REFUSED,NOTIMP.
WSANO_DATA 合法名,无请求类型的数据记录.
下列的错误可能在函数调用时发生,指出异步操作不能初启.
WSANOTINITIALISED 在使用本API前必须进行一次成功的WSAStartup()调用.
WSAENETDOWN Windows Sockets的实现已检测到网络子系统故障.
WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行.
WSAEWOULDBLOCK 本异步操作此时由于Windows Sockets实现的资源或其它限制的制约而无法调度.

WSAAsyncGetHostByAddr()参见

编辑
gethostbyaddr(),WSACancelAsyncRequest()
词条标签:
计算机学