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函数用法及注意事项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南