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毫秒