📄 5-3.html
字号:
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">返回值</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回值指出异步操作是否成功地初启</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>注意它并不隐含操作本身的成功或失败</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若操作成功地初启</FONT><FONT SIZE=3>,WSAAsyncGetProtoByNumber()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回一个</FONT><FONT SIZE=3>HANDLE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>类型的非</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>值</FONT><FONT SIZE=3>, </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>作为请求需要的异步任务句柄</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>该值可在两种方式下使用</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>它可通过</FONT><FONT SIZE=3>WSACancelAsyncRequest()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>用来取消该操作</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>也可通过检查</FONT><FONT SIZE=3>wParam</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>消息参数</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>以匹配异步操作和完成消息</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>如果异步操作不能初启</FONT><FONT SIZE=3>,WSAAsyncGetProtoByNumber()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>返回一个</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>值</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>并且可使用</FONT><FONT SIZE=3>WSAGetLastError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来获取错误号</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">评价</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的实现使用提供给该函数的缓冲区来构造</FONT><FONT SIZE=3>protoent</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构以及该结构成员引用的数据区内容</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为避免上述的</FONT><FONT SIZE=3>WSAENOBUFS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>错误</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序应提供一个至少</FONT><FONT SIZE=3>MAXGETHOSTSTRUCT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>字节大小的缓冲区</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">关于</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>提供者的说明:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的实现应保证消息能成功地传给应用程序</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>如果</FONT><FONT SIZE=3>PostMessage()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作失败</FONT><FONT SIZE=3>,Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的实现必须重发该消息-只要窗口存在</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的提供者在消息中组织</FONT><FONT SIZE=3>lParam</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>时应使用</FONT><FONT SIZE=3>WSAMAKEASYNCREPLY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>宏</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">错误代码</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在应用程序的窗口收到消息时可能会设置下列的错误代码</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>如上所述</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>它们可以通过</FONT><FONT SIZE=3>WSAGETASYNCERROR</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>宏从应答的消息</FONT><FONT SIZE=3>lParam</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中取出</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSAENETDOWN WINDOWS SOCKETS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现已检测到网络子系统故障</FONT><FONT SIZE=3>. WSAENOBUFS </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>可用的缓冲区空间不足或没有</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSAHOST_NOT_FOUND </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>未找到授权应答主机</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSATRY_AGAIN </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>未找到非授权应答主机</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>或</FONT><FONT SIZE=3>SERVERFAIL.</P>
<P ALIGN="JUSTIFY">	WSANO_RECOVERY </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>不可恢复性错误</FONT><FONT SIZE=3>,FORMERR,REFUSED,NOTIMP.</P>
<P ALIGN="JUSTIFY">	WSANO_DATA </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>合法名</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>无请求类型的数据记录</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>下列的错误可能在函数调用时发生</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>指出异步操作不能初启</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSANOTINITIALISED </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在使用本</FONT><FONT SIZE=3>API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>前必须进行一次成功的</FONT><FONT SIZE=3>WSAStartup()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>调用</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSAENETDOWN WINDOWS SOCKETS</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现已检测到网络子系统故障</FONT><FONT SIZE=3>. </P>
<P ALIGN="JUSTIFY">	WSAEINPROGRESS </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>一个阻塞的</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作正在进行</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	WSAEWOULDBLOCK </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>本异步操作此时由于</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现的资源或其它限制的制约而无法调度</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">参见</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	getprotobynumber(), WSACancelAsyncRequest()</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626867"><A NAME="_Toc336792950"><A NAME="_Toc336793426"></FONT><FONT SIZE=5>5.3.5 WSAAsyncGetServByName()</A></A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">简述</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>获得对应于一个服务名和接口的服务信息</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>-异步版本</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	#include <winsock.h></P>
<P ALIGN="JUSTIFY">	</P>
<P ALIGN="JUSTIFY">			HANDLE PASCAL FAR WSAAsyncGetServByName ( HWND hWnd,</P>
<P ALIGN="JUSTIFY">			unsigned int wMsg, const char FAR * name, const char FAR *</P>
<P ALIGN="JUSTIFY">			proto, char FAR * buf, int buflen );</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	hWnd </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>当异步请求完成时</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应该接收消息的窗口句柄</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	wMsg </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>当异步请求完成时</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>将要接收的消息</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	name </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>指向服务名的指针</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	proto </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>指向协议名称的指针</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>它可能是</FONT><FONT SIZE=3>NULL,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在这种情况下</FONT><FONT SIZE=3>,WSAAsyncGetServByName()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>将搜索第一个服务入口</FONT><FONT SIZE=3>(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>满足</FONT><FONT SIZE=3>s_name</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>或</FONT><FONT SIZE=3>s_aliases</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之一和所给的名字匹配</FONT><FONT SIZE=3>.)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>否则</FONT><FONT SIZE=3>, WSAAsyncGetServByName()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>将和名和协议同时匹配</FONT><FONT SIZE=3>.</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>buf </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>接收</FONT><FONT SIZE=3>protoent</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>数据的数据区指针</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>注意该数据区必须大于</FONT><FONT SIZE=3>protoent</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构的大小</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>这是因为不仅</FONT><FONT SIZE=3>Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现要用该数据区域容纳</FONT><FONT SIZE=3>protoent</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构</FONT><FONT SIZE=3>,protoent</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构的成员引用的所有数据也要在该区域内</FONT><FONT SIZE=3>. </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>建议用户提供一个</FONT><FONT SIZE=3>MAXGETHOSTSTRUCT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>字节大小的缓冲区</FONT><FONT SIZE=3>.</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>buflen </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>上述数据区的大小</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY"></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">注释</FONT><FONT SIZE=3>:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>本函数是</FONT><FONT SIZE=3>getservbyname()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的异步版本</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>是用来获取对应于一个服务名的服务信息</FONT><FONT SIZE=3>.Windows Sockets</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的实现启动该操作后立刻返回调用方</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>并传回一个异步任务句柄</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序可以用它来标识该操作</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>当操作完成时</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结果</FONT><FONT SIZE=3>(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>若有的话</FONT><FONT SIZE=3>)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>将会拷贝到调用方提供的缓冲区</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>同时向应用程序的窗口发一条消息</FONT><FONT SIZE=3>.</P>
<P ALIGN="JUSTIFY">	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>当异步操作完成时</FONT><FONT SIZE=3>,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序的窗口</FONT><FONT SIZE=3>hWnd</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>接收到消息</FONT><FONT SIZE=3>wMsg. wParam</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>参数包含了初次函数调用时返回的异步任务句柄</FONT><FONT SIZE=3>.lParam</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的高</FONT><FONT SIZE=3>16</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>位包含着错误代码</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>该代码可以是</FONT><FONT SIZE=3>winsock.h</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中定义的任何错误</FONT><FONT SIZE=3>.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>错误代码为</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -