ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-08-29 03:00:36  阅读:227  来源: 互联网

标签:addr int 08 29 connect sockfd 服务端 socket


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

标签:addr,int,08,29,connect,sockfd,服务端,socket
来源: https://www.cnblogs.com/YiMingXiaoBuYiMengXiaoNai/p/Linux-C-connect-function.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有