connect,listen,accept函数

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)
从上面的完成了三次握手队列里面取出一个文件描述符。

猜你喜欢

转载自blog.csdn.net/wjh814/article/details/81116931
今日推荐