第七章 WINDOWS SOCKETS 2扩展库函数简要参考EddyEddy

发布时间 : 星期日 文章第七章 WINDOWS SOCKETS 2扩展库函数简要参考EddyEddy更新完毕开始阅读

第七章 Windows Sockets 2扩展库函数简要参考

7.1 WSAAccept()

简述:根据条件函数的返回值有条件地接受连接,同时(可选地)创建和/或加入一个套接口组。

SOCKET WSAAPI WSAAccept ( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen,

LPCONDITIONPROC lpfnCondition, DWORD dwCallbackData );

s:标识一个套接口的描述字,该套接口在listen()后监听连接。

addr:(可选)指针,指向存放通讯层所知的连接实体地址的缓冲区。addr参数的具体格式由套接口创建时产生的地址族决定。

addrlen:(可选)指针,指向存放addr地址长度的整形数。

lpfnCondition:(可选的)用户提供的条件函数的进程实例地址。该函数根据参数传入的调用者信息作出接受或拒绝的决定,并通过给结果参数赋予特定的值来(可选地)创建和/或加入一个套接口组。

dwCallbackData:作为条件函数参数返回给应用程序的回调数据。WinSock不分析该参数。

返回值:

若无错误发生,WSAAccept()函数返回所接受套接口的描述字。否则的话,将返回INVALID_SOCKET错误,应用程序可通过WSAGetLastError()来获取相应的错误代码。

addrlen参数引用的整形数初始时包含了addr参数所指向的空间数,在调用返回时包含了返回地址的实际长度。

错误代码:

WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。 WSAECONNREFUSED 根据条件函数的返回值(CF_REJECT)强制拒绝连接请求。 WSAENETDOWN 网络子系统失效。 WSAEFAULT addrlen参数太小(小于sockaddr结构的大小),或者lpfnCondition并不是用户空间的一部分。 WSAEINTR 通过WSACancelBlockingCall()函数取消(阻塞)调用。 WSAEINPROGRESS 一个阻塞WinSock调用正在进行。 WSAEINVAL WSAAccept()调用前未执行listen()调用;条件函数中的g参数非法;条件函数的返回值非法;套接口处于非法状态。 WSAEMFILE WSAAccept()调用时排队队列非空,且无可用套接口描述字。

WSAENOBUFS WSAENOTSOCK WSAEOPNOTSUPP WSATRY_AGAIN WSAEWOULDBLOCK WSAEACCES 无可用缓冲区空间。

描述字不是一个套接口。

所引用的套接口不是支持面向连接服务类型的。

根据条件函数的返回值(CF_DEFER) ,连接请求被推迟。 套接口标志为非阻塞,无连接请求供接受。 被推迟的连接请求超时或撤销。

另请参阅:accept(), bind(), connect(), getsockopt(),listen(), select(), socket(), SAAsyncSelect(), WSAConnect().

7.2 WSACloseEvent()

简述:关闭一个开放的事件对象句柄。

#include

BOOL WSAAPI WSACloseEvent( WSAEVENT hEvent );

hEvent:标识一个开放的事件对象句柄。

返回值:

如果函数顺利完成,返回值为真TRUE。如果失败,返回值为假FALSE。可用 WSAGetLastError()调用获取更多的错误信息。

错误代码:

WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。 WSAENETDOWN 网络子系统失效。

WSA_INVALID_HANDLE hEvent不是一个合法的事件对象句柄。

另请参阅:

WSACreateEvent(),

WSAEnumNetworkEvents(),WSAEventSelect(),

WSAResetEvent(),WSASend(),

WSAGetOverlappedResult(),WSARecv(), WSARecvFrom(), WSASendTo(), WSASetEvent(),WSAWaitForMultipleEvents().

7.3 WSAConnect()

简述:创建一个与远端的连接,交换连接数据,并根据所提供的流描述确定所需的服务质量。

#include

int WSAAPI WSAConnect ( SOCKET s, const struct sockaddr FAR * name,

int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData,

LPQOS lpSQOS, LPQOS lpGQOS );

s:用于描述一个未连接套接口的描述字。 name:欲与套接口连接的远端名字。 namelen:名字长度。

lpCallerData:指向用户数据的指针,该数据在建立连接时将传送到远端。

lpCalleeData:指向用户数据的指针,该数据在建立连接时将从远端传送回本机。 lpSQOS:指向套接口s流描述的指针,每个方向一个。

lpGQOS:指向套接口组流描述的指针。(如果有套接口组的话)

返回值:

如果无错误发生,WSAConnect()返回0。否则的话,将返回INVALID_SOCKET错误,应用程序可通过WSAGetLastError()来获取相应的错误代码。 对于阻塞套接口来说,返回值表示连接试图是否成功。

对于非阻塞套接口来说,连接试图不一定马上完成。在这种情况下,WSAConnect()返回SOCKET_ERROR,且WSAGetLastError()返回WSAEWOULDBLOCK. 此时应用程序可以: 1。利用select()函数,通过检查套接口是否可写来判断连接请求是否完成。或者,

2。如果应用程序已使用WSAAsyncSelect()函数来确定对连接事件的兴趣,则当连接操作完成时应用程序将收到FD _CONNECT通知。或者, 3。如果应用程序已使用WSAEventSelect()函数来确定对连接事件的兴趣,则当连接操作完成时相应的事件对象将设置信号。

对于一个非阻塞套接口来说,在连接试图完成之前,任何对该套接口的WSAConnect()调用都将以WSAEALREADY错误失败。

如果返回值指出连接试图失败(例如WSAECONNREFUSED, WSAENETUNREACH,WSAETIMEDOUT)则应用程序可对该套接口再次调用WSAConnect()函数。

错误代码:

WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。 WSAENETDOWN 网络子系统失效。 WSAEADDRINUSE 所指地址已被使用。 WSAEINTR 通过WSACancelBlockingCall()函数中止了阻塞调用。 WSAEINPROGRESS 一个阻塞的WinSock调用正在进行中,或者服务提供者仍在处理一个回调函数。(参见B.3.6.6节) WSAEALREADY 在所指定的套接口上正在进行一个非阻塞的connect()或

联系合同范文客服:xxxxx#qq.com(#替换为@)