Programming 版 (精华区)

发信人: superman (风雨无阻), 信区: Programming
标  题: 简单的 Winsock 应用程式设计(函数篇.二)(fwd) (转载)
发信站: 紫丁香 (Thu Oct  9 21:56:04 1997)

【 以下文字转载自 Winsock 讨论区 】
【 原文由 topcon 所发表 】
发信站: 白山黑水 (Tue Apr 23 21:57:55 1996)

[Microsoft Windows-specific Extensions]

(1) WSAAsyncGetHostByAddr():利用某一 host 的位址来获取该 host 的资料。
                             (非同步方式)

    格  式: HANDLE PASCAL FAR
             WSAAsyncGetHostByAddr( HWND hWnd,
                                    unsigned int wMsg,
                                    const char FAR *addr,
                                    int len,
                                    int type,
                                    char FAR *buf,
                                    int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             addr       network 排列方式的位址
             len        addr 的长度
             type       PF_INET(AF_INET)
             buf        存放 hostent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明: 此函式是利用位址来获取 host 的其他资料,如 host 的名称、
别名, 位址的型态、长度等。使用者呼叫此函式时必须传入要接收资料的视窗
handle、讯息代码、资料的存放位置指标等,以便得到资料时可以通知该视窗
来使用资料。呼叫此函式後会马上回到使用者的呼叫点并传回一个 handle,
此 handle 可用来辨别此非同步动作或用来取消此非同步动作。当资料取得後,
会送一个讯息到使用者指定的视窗。


(2) WSAAsyncGetHostByName():利用某一 host 的名称来获取该 host 的资料。
                              (非同步方式)

    格  式: HANDLE PASCAL FAR
             WSAAsyncGetHostByName( HWND hWnd,
                                    unsigned int wMsg,
                                    const char FAR *name,
                                    char FAR *buf,
                                    int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             name       host 名称
             buf        存放 hostent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明: 此函式是利用 host 名称来获取其他的资料,如 host 的位址、
别名, 位址的型态、长度等。使用者呼叫此函式时必须传入要接收资料的视窗
handle、讯息代码、资料的存放位置指标等,以便得到资料时可以通知
该视窗来使用资料。呼叫此函式後会马上回到使用者的呼叫点并传回一
个 handle,此handle 可用来辨别此非同步动作或用来取消此非同步动
作。当资料取得後,会送一个讯息到使用者指定的视窗。

(3) WSAAsyncGetProtoByName():依照通讯协定的名称来获取该通讯协定的
                              其他资料。(非同步方式)

    格  式: HANDLE PASCAL FAR
             WSAAsyncGetProtoByName( HWND hWnd,
                                     unsigned int wMsg,
                                     const char FAR *name,
                                     char FAR *buf,
                                     int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             name       通讯协定名称
             buf        存放 protoent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明: 利用通讯协定的名称来得知该通讯协定的别名、编号等资料。
使用者呼叫此函式时必须传入要接收资料的视窗 handle、讯息代码、
资料的存放位置指标等,以便得到资料时可以通知该视窗来使用资料。
呼叫此函式後会马上回到使用者的呼叫点并传回一个 handle,此  handle
可用来辨别此非同步动作或用来取消此非同步动作。当资料取得後,会
送一个讯息到使用者指定的视窗。


(4) WSAAsyncGetProtoByNumber():依照通讯协定的编号来获取该通讯协定
                                的其它资料。 (非同步方式)

    格  式: HANDLE PASCAL FAR
             WSAAsyncGetProtoByNumber( HWND hWnd,
                                       unsigned int wMsg,
                                       int number,
                                       char FAR *buf,
                                       int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             number     通讯协定编号,host 排列方式
             buf        存放 protoent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明: 利用通讯协定的编号来得知该通讯协定的名称、别名等资料。
使用者呼叫此函式时必须传入要接收资料的视窗 handle、讯息代码、资
料的存放位置指标等,以便得到资料时可以通知该视窗来使用资料。呼
叫此函式後会马上回到使用者的呼叫点并传回一个 handle,此 handle 可
用来辨别此非同步动作或用来取消此非同步动作。当资料取得後,会送
一个讯息到使用者指定的视窗。


 (5) WSAAsyncGetServByName():依照服务 (service) 名称及通讯协定来
                              获取该服务的其他资料。(非同步方式)
                                        
    格  式: HANDLE PASCAL FAR
             WSAAsyncGetServByName( HWND hWnd,
                                    unsigned int wMsg,
                                    const char FAR *name,
                                    const char FAR *proto,
                                    char FAR *buf,
                                    int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             name       服务名称
             proto      通讯协定名称
             buf        存放 servent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明: 利用服务名称及通讯协定来获得该服务的别名、使用的port编号等。
使用者呼叫此函式时必须传入要接收资料的视窗 handle、讯息代码、资料
的存放位置指标等,以便得到资料时可以通知该视窗来使用资料。呼叫
此函式後会马上回到使用者的呼叫点并传回一个 handle,此  handle 可
用来辨别此非同步动作或用来取消此非同步动作。当资料取得後,会送
一个讯息到使用者指定的视窗。


(6) WSAAsyncGetServByPort():依照服务 (service) 的 port 编号及通讯协定
                             来获取该服务的其他资料。(非同步方式)

    格  式: HANDLE PASCAL FAR
             WSAAsyncGetServByPort( HWND hWnd,
                                    unsigned int wMsg,
                                    int port,
                                    const char FAR *proto,
                                    char FAR *buf,
                                    int buflen );

    参  数: hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             port       服务的 port 编号,network 排列方式
             proto      通讯协定名称
             buf        存放 servent 资料的区域
             buflen     buf 的大小

    传回值: 成功 - 代表此 Async 动作的 handle
             失败 - 0  (呼叫 WSAGetLastError() 可得知原因)

    说明:利用 port 编号及通讯协定来获得该服务的名称、别名等。
使用者呼叫此函式时必须传入要接收资料的视窗 handle、讯息代码、资料
的存放位置指标等,以便得到资料时可以通知该视窗来使用资料。呼叫此函
式後会马上回到使用者的呼叫点并传回一个 handle,此  handle 可用来辨别
此非同步动作或用来取消此非同步动作。当资料取得後,会送一个讯息到使
用者指定的视窗。


(7) WSAAsyncSelect():要求某一 Socket 有事件 (event) 发生时通知使用者。

    格  式: int PASCAL FAR
             WSAAsyncSelect( SOCKET s, HWND hWnd,
                             unsigned int wMsg, long lEvent );

    参  数: s          Socket 的编号
             hWnd       动作完成後,接受讯息的视窗 handle
             wMsg       传回视窗的讯息
             lEvent     应用程式有兴趣的网路事件

    传回值: 成功 - 0
             失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

    说明: 此函式是让使用者用来要求 Windows Sockets DLL 在侦测到某一
Socket 有网路事件时送讯息到使用者指定的视窗;网路事件是由参数 lEvent
设定。呼叫此函式会主动将该 Socket 设定为 Non-blocking 模式。
lEvent 的值可为以下之组合:(参见 WINSOCK第1.1版88、89页)
FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、
FD_CLOSE  使用者若是针对某一Socket再次呼叫此函式时,会取消对该
Socket   原先之设定。若要取消对该Socket 的所有设定,则 lEvent 的值
必须设为0。


(8) WSACancelAsyncRequest():取消某一未完成的非同步要求。

    格  式: int PASCAL FAR
             WSACancelAsyncRequest( HANDLE hAsyncTaskHandle );

    参  数: hAsyncTaskHandle  要取消的 task handle

    传回值: 成功 - 0
             失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

    说明: 此函式是用来取消原先呼叫但尚未完成的WSAAsyncGetXByY(),例如
WSAAsyncGetHostByName(),的动作。参数 hAsyncTaskHandle 即为呼
叫WSAAsyncGetXByY() 时传回之值。若是原先呼叫之非同步要求已经
完成,则无法加以取消。

(9) WSACancelBlockingCall():取消目前正在进行中的 blocking 动作。

    格  式: int PASCAL FAR WSACancelBlockingCall( void );

    参  数: 无

    传回值: 成功 - 0
             失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

    说明: 此函式用来取消该应用程式正在进行中的 blocking 动作。
通常的使用时机有:

(a)  Blocking 动作正在进行中,该应用程式又收到某一讯息,则可在处
理该讯息的段落中呼叫此函式。
(b)  Blocking 动作正在进行中,而 Windows Sockets 又呼叫回应用程式
的「blocking hook」函式时,在该函式内可呼叫此函式来取消 blocking 动作。

使用者必须注意,在 blocking 动作进行时,除了WSAIsBlocking() 及
WSACancelBlockingCall() 外,不可以再呼叫其它任何 Windows  Sockets
DLL 提供的函式,否则会产生错误。另外若取消的 blocking  动作不是
accept() 或 select() 的话,那麽 Socket 会处於未定状态,使用者只能呼
叫 closesocket() 来关闭该 Socket,而不该再对它做任何动作。


(10) WSACleanup():结束 Windows Sockets DLL 的使用。

     格  式: int PASCAL FAR WSACleanup( void );

     参  数: 无

     传回值:成功 - 0
             失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

     说明: 应用程式在使用 Windows Sockets DLL 时必须先呼叫 WSAStartup()
来向 Windows Sockets DLL 注册;当应用程式不再需要使用 Windows Sockets
DLL 时,须呼叫此一函式来注销使用,以便释放其占用的资源。


(11) WSAGetLastError():获取最後一次错误发生时的讯息。

     格  式: int PASCAL FAR WSAGetLastError( void );

     参  数: 无

     传回值: Windows Sockets API 最後发生的错误码

     说明: 此函式用来获取最後一次网路错误发生时的讯息。


(12) WSAIsBlocking():检查是否有 blocking 动作正在进行中。

     格  式: BOOL PASCAL FAR WSAIsBlocking( void );

     参  数: 无

     传回值: TRUE  - 有 blocking 动作正在进行中
              FALSE - 没有 blocking 动作

     说明: 此函式是给使用者用来检查目前是否有 blocking 动作正在进行中。
由於blocking 动作进行时,应用程式仍可能收到其它的讯息,所以使用
者可以呼叫此一函式来检查 blocking 动作是否完成了,以免再未完成前
呼叫了不当的函式。


(13) WSASetBlockingHook():建立应用程式指定的 blocking hook 函式。

     格  式: FARPROC PASCAL FAR
              WSASetBlockingHook( FARPROC lpBlockFunc );

     参  数: lpBlockfunc  指向要装设的 blocking hook 函式的位址的指标

     传回值: 指向前一个 blocking hook 函式的位址的指标

     说明: 此函式让使用者可以设定他自己的函式,以取代原先系统预设的函
式。被设定的函式将会在应用程式呼叫到「blocking」动作时执行。

唯一可在使用者指定的 blocking hook 函式中呼叫的 Windows   Sockets
介面函式只有 WSACancelBlockingCall()。


(14) WSASetLastError():设定错误码;此设定值可用 WSAGetLastError() 获得。

     格  式: void PASCAL FAR WSASetLastError( int iError );

     参  数: iError   欲设定的错误码

     传回值: 无

     说明: 此函式可用来设定错误码,以被稍後的 WSAGetLastError() 获得;
但若是有其他的Windows Sockets 函式被呼叫到,则此函式设定的错误值会
被更改掉。


(15) WSAStartup():连结应用程式与 Windows Sockets DLL 的第一个函式。

     格  式: int PASCAL FAR WSAStartup( WORD wVersionRequested,
                                         LPWSADATA lpWSAData );

     参  数: wVersionRequested 可使用的 Windows Sockets API 最高版本
              lpWSAData         指向 WSADATA 资料的指标

              struct WSAData {
                WORD            wVersion;
                WORD            wHighVersion;
                char            szDescription[WSADESCRIPTION_LEN+1];
                char            szSystemStatus[WSASYSSTATUS_LEN+1];
                unsigned short  iMaxSockets;
                unsigned short  iMaxUdpDg;
                char FAR *      lpVendorInfo;
              };

     传回值: 成功 - 0
              失败 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL

     说明: 此函式「必须」是应用程式呼叫到 Windows Sockets DLL 函式中
的第一个,也唯有此函式呼叫成功後,才可以再呼叫其他 Windows  Sockets
DLL 的函式。此函式亦让使用者可以指定要使用的 Windows Sockets
API 版本,及获取设计者的一些资讯。 (* 目前只提供 WINSOCK 第 1.1
版的功能)


(16) WSAUnhookBlockingHook():复原预设的 blocking hook 函式。

     格  式: int PASCAL FAR WSAUnhookBlockingHook( void );

     参  数: 无

     传回值: 成功 - 0
              失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

     说明: 此函式取消使用者设定的 blocking hook 函式,而回复原先预设的
blocking hook 函式。

--
※ 来源:.白山黑水 bbs.neu.edu.cn.[FROM: beaver]

--
※ 来源:·哈尔滨紫丁香站 bbs1.hit.edu.cn·[FROM: bbs@conger.neu.edu.c] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:209.232毫秒