Linux C 中connect函数用法详细介绍及注意事项:
C语言connect()函数的函数功能:
简单来讲就是:我客户端,自身socket用于和服务端的socket建立socket连线。
用于向目的IP和目的端口请求建立连接,向服务端(socket)发起tcp建立连接请求。
connect()用来将参数sockfd的socket连至参数serv_addr指定的服务端网络地址。
头文件:
Windows下:
linux下:
函数原型:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
或 int connect(int sockfd, const struct sockaddr *addr, int addrlen);
或 int connect(int sockfd, const struct sockaddr *serv_addr, int addrlen);
connect(sockcd,(sockaddr *)&serv_addr,sizeof(serv_addr));
accept()函数,其实是服务器端把连接请求信息记录到等待队列。因此connect()函数返回后并不进行数据交换。而是要等服务器端 accept 之后才能进行数据交换。
这一步调用完成之后,就和服务端建立了通信,就可以使用send或recv相互发送和接收数据消息了。
参数说明:
sockfd为客户端建立socket函数的返回值。
addr是一个sockaddr结构的指针,用于指定所要连接的服务器的地址(服务端的IP地址和端口号,要和服务端的实际IP地址以及绑定的端口一致才可以)。
addrlen为addr变量的大小,即为sockaddr的结构长度,可由sizeof()计算得出。
通俗理解:第一个是文件描述符,是由socket函数创建的;第二个保存的是服务端的IP和端口,也是大端的格式;第三个是服务端addr的内存结构大小。
返回值类型:整型 int
返回值:成功则返回0, 失败返回-1, 错误原因存于errno 中。
当客户端调用 connect()函数之后,发生以下情况之一才会返回(完成函数调用)
1、服务器端接收该客户端的连接请求
2、发生断网的异常情况而中断连接请求
错误代码:
1、EBADF 参数sockfd 非合法socket 处理代码
2、EFAULT 参数serv_addr 指针指向无法存取的内存空间
3、ENOTSOCK 参数sockfd 为一文件描述词, 非socket
4、EISCONN 参数sockfd 的socket 已是连线状态
5、ETIMEDOUT 企图连线的操作超过限定时间仍未有响应
6、ENETUNREACH 无法传送数据包至指定的主机
7、EAFNOSUPPORT sockaddr 结构的sa_family 不正确
8、EALREADY socket 为不可阻断且先前的连线操作还未完成
参考资料:
网络资源:https://zhuanlan.zhihu.com/p/520086291