WSAConnect()

王朝百科·作者佚名  2010-01-05  
宽屏版  字体:   |    |    |  超大  

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

#include <winsock2.h>

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()或WSAConnect()调用。

WSAEADDRNOTAVAIL 本地机器上无法获得所指定的地址。

WSAEAFNOSUPPORT 所指定地址族中的地址无法与本套接口一起使用。

WSAECONNREFUSED 连接试图被拒绝。

WSAEFAULT name或namelen参数不是用户地址空间的一个有效部分;namelen参数太小; lpCalleeData、 lpSQOS和lpGQOS的缓冲区太小;或者lpCallerData的缓冲区太大。

WSAEINVAL 套接口已与一个地址捆绑。

WSAEINVAL 套接口未与一个地址捆绑。

WSAEINVAL s参数为监听套接口。

WSAEISCONN 套接口已经连接(仅适用于面向连接的套接口)。

WSAENETUNREACH 当前无法从本主机联系网络。

WSAENOBUFS 无可用缓冲区,套接口未连接。

WSAENOTSOCK 描述字不是一个套接口。

WSAEOPNOTSUPP lpSQOS和lpGQOS中的流描述无法满足。

WSAEPROTONOSUPPORT 服务提供者不支持lpCallerData参数。

WSAETIMEDOUT 连接试图超时,连接未建立。

WSAEWOULDBLOCK 套接口标志为非阻塞,连接无法立即完成。当套接口用select()函数设置为读时,可调用select()。

WSAEACCES 由于setsockopt()时未允许SO_BROADCAST,无法将一个数据报套接口与一个广播地址连接。

另请参阅: accept(), bind(), connect(), getsockname(),getsockopt(), socket(), select(),

WSAAsyncSelect(), WSAEventSelect().

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有