connect()

更新时间:2023-12-23 21:28

connect()用于建立与指定socket的连接。

作用

connect() 函数用来建立连接,它的原型为:

参数

定义函数:int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);

sockfd:标识一个套接字。

serv_addr:套接字s想要连接的主机地址和端口号。

addrlen:name缓冲区的长度。

错误代码解释

定义函数:int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);

EBADF 参数sockfd 非合法socket处理代码

EFAULT 参数serv_addr指针指向无法存取的内存空间

ENOTSOCK 参数sockfd为一文件描述词,非socket。

EISCONN 参数sockfd的socket已是连线状态

ECONNREFUSED 连线要求被server端拒绝。

ETIMEDOUT 企图连线的操作超过限定时间仍未有响应。

ENETUNREACH 无法传送数据包至指定的主机。

EAFNOSUPPORT sockaddr结构的sa_family不正确。

EALREADY socket为不可阻塞且先前的连线操作还未完成。

注释

本函数用于创建与指定外部端口的连接。s参数指定一个未连接的数据报或流类套接口。如套接口未被捆绑,则系统赋给本地关联一个唯一的值,且设置套接口为已捆绑。请注意若名字结构中的地址域为全零的话,则connect()将返回WSAEADDRNOTAVAIL错误。

对于流类套接口(SOCK_STREAM类型),利用名字来与一个远程主机建立连接,一旦套接口调用成功返回,它就能收发数据了。对于数据报类套接口(SOCK_DGRAM类型),则设置成一个缺省的目的地址,并用它来进行后续的send()与recv()调用。

函数说明

connect()用来将参数sockfd 的socket 连至参数serv_addr 指定的网络地址. 结构sockaddr请参考bind(). 参数addrlen 为sockaddr 的结构长度.

返回值:成功则返回0, 失败返回-1, 错误原因存于errno 中.

返回值

若无错误发生,则connect()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。对非阻塞套接口而言,若返回值为SOCKET_ERROR则应用程序调用WSAGetLastError()。如果它指出错误代码为WSAEWOULDBLOCK,则您的应用程序可以:

1.用select(),通过检查套接口是否可写,来确定连接请求是否完成。

2.如果您的应用程序使用基于消息的WSAAsyncSelect()来表示对连接事件的兴趣,则当连接操作完成后,您会收到一个FD_CONNECT消息。

错误代码

WSAENOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。

WSAENETDOWN:套接口实现检测到网络子系统失效。

WSAEADDRINUSE:所指的地址已在使用中。

WSAEINTR:通过一个WSACancelBlockingCall()来取消一个(阻塞的)调用。

WSAEINPROGRESS:一个阻塞的套接口调用正在运行中。

WSAEADDRNOTAVAIL:在本地机器上找不到所指的地址。

WSAENOTSUPPORT:所指族中地址无法与本套接口一起使用。

WSAECONNREFUSED:连接尝试被强制拒绝。

WSAEDESTADDREQ:需要目的地址。

WSAEFAULT:namelen参数不正确。

WSAEINVAL:套接口没有准备好与一地址捆绑。

WSAEISCONN:套接口早已连接。

WSAEMFILE:无多余文件描述字。

WSAENETUNREACH:当前无法从本主机访问网络。

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

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

WSAETIMEOUT:超时时间到。

WSAEWOULDBLOCK:套接口设置为非阻塞方式且连接不能立即建立。可用select()调用对套接口写,因为select()时会进行连接。

参见

accept(), bind(), getsockname(), socket(), select(), WSAAsyncSelect().

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}