首页 > 系统相关 >2022-08-29-Linux C 中connect函数用法及注意事项

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

时间:2022-08-29 02:33:21浏览次数:73  
标签: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
From: https://www.cnblogs.com/YiMingXiaoBuYiMengXiaoNai/p/Linux-C-connect-function.html

相关文章

  • gym-103708E Erudite of words
    Eruditeofwords组合数学+容斥定义\(F_i\):表示由\(i\)个字母组成的长度为\(n\)的单词数(每个字母必须在单词中出现)显然答案就是\(F_k*C_{m}^{k}\)关于\(F_i......
  • PAT Advanced 1029 Median(25)
    题目描述:GivenanincreasingsequenceSofNintegers,themedianisthenumberatthemiddleposition.Forexample,themedianofS1={11,12,13,14}is1......
  • 20220815今天学了干了什么?努力过好今天
    看课给了两个bug   js的课,那今天开这个课,就把它学明白。 这个知识点是什么呢?把它弄明白。 今天我能学什么知识?好好努力,顺其自然,自然社交,尊重别人,话说三分,得......
  • 2022-08-24 day34 第一小组 王鸣赫
    目录JavaScriptJS的数据类型函数(相当于java的方法对象判断和循环常见工具对象JavaScript(独有的)DOM编程DocumentObjectModel获取元素节点innerHTML和innerText新增元素......
  • gym-103708D Different Pass a Ports
    DifferentPassaPorts矩阵快速幂模板图的邻接矩阵的\(k\)次幂就是从图上所有点走\(k\)步的方案数#include<iostream>#include<cstdio>usingnamespacestd;......
  • gym-103708F Froginald the frog
    Froginaldthefrog矩阵快速幂如果没有分隔的话,这就是一个矩阵快速幂求斐波那契的问题因为有分隔,因此考虑他们分成若干个块,每个块的方案数之积就是答案,显然分隔的长度如......
  • 2022-08-23 day33 第一小组 王鸣赫
    目录CSS三大特性1、层叠性2、继承性3、优先级常用单位字体背景列表属性盒子模型display的inline、block、inline-block的区别文档流定位定位的left和top、right和bottom和m......
  • gym-103708B Building 5G antennas
    Building5Gantennasdfs剪枝要字典序最小,显然第一个点就是\(1\),后面考虑走\(k\)步后能到达的点集中选一个字典序最小的,重复该过程考虑\(set[i][j]\)表示第\(i\)......
  • 【动植物研究动态】20220815文献解读
    目录HorticRes|武汉大学李家儒:盾叶薯蓣高质量基因组解析与薯蓣皂苷生物合成进化TheCropJournal|华南农业大学肖德琴:一种新的水稻穗多发育期自动识别算法TheCropJo......
  • 【动植物研究动态】20220828文献解读
    目录ScienceBulletin|中国农科院作科所徐建龙&邱丽娟:大豆种质资源组学数据库SoyFGBv2.0搭建SCLS|种康、贾继增等:中国小麦基因组学和性状改良研究综述TheCropJourna......