字典大全

首页 汉语字典 词语字典 成语字典 诗词 中草药 中药名方 民间偏方 民间验方 酒方 粥谱 歇后语 五笔编码
旅游 动物 植物 微生物 自然天文 金融 数理化 电脑网络 健康 饮食 交通 体育 公交线路 汉字转拼音
wsaasyncgetprotobynumber()
简述:
        获得对应于一个协议号的协议信息.-异步版本.
        #include <winsock.h>
       
                        handle pascal far wsaasyncgetprotobynumber ( hwnd hwnd,
                        unsigned int wmsg,  int number, char far * buf, int buflen);

        hwnd    当异步请求完成时,应该接收消息的窗口句柄.
        wmsg    当异步请求完成时,将要接收的消息.
        number  要获得的协议号,以主机字节序.
        buf 接收protoent数据的数据区指针.注意该数据区必须大于protoent结构的大小.这是因为不仅windows sockets实现要用该数据区域容纳protoent结构,protoent结构的成员引用的所有数据也要在该区域内. 建议用户提供一个maxgethoststruct字节大小的缓冲区.
        buflen  上述数据区的大小.

注释:
        本函数是getprotobynumber()的异步版本,是用来获取对应于一个协议号的协议名称和代号.windows sockets的实现启动该操作后立刻返回调用方,并传回一个异步任务句柄,应用程序可以用它来标识该操作.当操作完成时,结果(若有的话)将会拷贝到调用方提供的缓冲区,同时向应用程序的窗口发一条消息.
        当异步操作完成时,应用程序的窗口hwnd接收到消息wmsg. wparam参数包含了初次函数调用时返回的异步任务句柄.lparam的高16位包含着错误代码.该代码可以是winsock.h中定义的任何错误.错误代码为0说明异步操作成功.在成功完成的情况下,提供给初始函数调用的缓冲区中包含了一个protoent结构.为存取该结构中的元素,初始的缓冲区指针应置为protoent结构的指针,并一如平常地存取.
        注意若错误代码为wsaenobufs,它说明在初始调用时由buflen指出的缓冲区大小对于容纳所有的结果信息来说太小了.在这种情况下,lparam的低16位含有提供所有信息所需的缓冲区大小数值.如果应用程序认为获取的数据不够,它就可以在设置了足够容纳所需信息的缓冲区后,重新调用wsaasyncgetprotobynumber().(也就是大于lparam低16位提供的大小.)
        错误代码和缓冲区大小应使用wsagetasyncerror和wsagetasyncbuflen宏从lparam中取出.两个宏定义如下:
                        #define wsagetasyncerror(lparam)            hiword(lparam)
                        #define wsagetasyncbuflen(lparam)           loword(lparam)
       
        使用这些宏可最大地提高应用程序源代码的可移植性.

返回值:
        返回值指出异步操作是否成功地初启.注意它并不隐含操作本身的成功或失败.
        若操作成功地初启,wsaasyncgetprotobynumber()返回一个handle类型的非0值, 作为请求需要的异步任务句柄.该值可在两种方式下使用.它可通过wsacancelasyncrequest()用来取消该操作.也可通过检查wparam消息参数,以匹配异步操作和完成消息.
        如果异步操作不能初启,wsaasyncgetprotobynumber()返回一个0值,并且可使用wsagetlasterror()来获取错误号.

评价:
        windows sockets的实现使用提供给该函数的缓冲区来构造protoent结构以及该结构成员引用的数据区内容.为避免上述的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实现的资源或其它限制的制约而无法调度.
       
参见:
        getprotobynumber(), wsacancelasyncrequest()
kodak←←←上一条 下一条→→→wsaasyncgetservbyname()

本站信息均由互联网搜集而来,本站不对信息的正确性负责,仅供大家参考研讨,有不妥之处还请来信指出,谢谢!
Copyright©2006-2023 网上字典大全  All Rights Reserved mail: