connect,listen,accept函数

本文详细解析了TCP连接建立过程中的三次握手机制。包括客户端如何通过connect函数发起连接请求,服务器端listen函数的作用及如何处理连接请求,以及accept函数如何接受已完成三次握手的连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

connect(int sockfd,struct sockaddr *addr,socklen_addr);

当函数进行到connect的时候,就会发生三次握手,三次握手不是这个函数执行的,而是这个函数通知linux内核,内核进行三次握手,成功为0,失败为1

listen(int sockfd,int backlog)

listen函数不会阻塞,它主要做的事情为:将套接字和套接字对应的连接队列长度告诉Linux内核,然后listen()函数就结束
通知内核三次握手
客户端发起connect时——————> listen有两个队列
1:未完成三次握手的队列
2:完成三次握手的队列
SYN=1,seq=x时
当三次握手第一,二阶段发送—————————>服务器这边处在SYN_RCVD状态。把这些套接字放在
<—-SYN=1,ACK=1,ack=1,seq=y
未完成三次握手的队列里面。
客户端发送ACK的时候
当最后一次 ——————–> 三次握手完成,connect返回,把刚刚的未完成三次握手的添加到完成三次握手的。

最后
int accept(int sockfd,struct sockaddr*addr,socklen_t *addrlen)
从上面的完成了三次握手队列里面取出一个文件描述符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值