2022-08-29-Linux C 中connect函数用法及注意事项

2022/8/30 5:24:08

本文主要是介绍2022-08-29-Linux C 中connect函数用法及注意事项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Linux C 中connect函数用法详细介绍及注意事项:

C语言connect()函数的函数功能:
简单来讲就是:我客户端,自身socket用于和服务端的socket建立socket连线。
用于向目的IP和目的端口请求建立连接,向服务端(socket)发起tcp建立连接请求。
connect()用来将参数sockfd的socket连至参数serv_addr指定的服务端网络地址。

头文件:
Windows下:

include <winsock2.h>

linux下:

include <sys/types.h>

include <sys/socket.h>

函数原型:
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



这篇关于2022-08-29-Linux C 中connect函数用法及注意事项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程