socket中的listen调用次数不理解
发布网友
发布时间:2022-05-09 17:34
我来回答
共2个回答
热心网友
时间:2023-10-10 18:00
listen只是创建监听套接字,3路握手并不是由listen函数来完成的。
listen只做两件事:
1,将socket创建的主动(默认)套接字转换成被动套接字,指示内核接受指向该套接字的连接请求
2,指定内核应该为相应套接字排队的最大连接数
accept仅仅是从监听套接字队列中取出完成握手的连接套接字,至于阻塞的唤醒也是由内核自动完成的
accept取出套接字的队列存放的全是已经完成连接的套接字,对于监听套接字,一般会有两个队列,未完成连接套接字和已完成连接套接字,当请求到达时,新建套接字会被存放在未完成中,3路握手完毕就会被转移到已完成队列里,accept就是从已完成队列里取。这两个队列的维护和3路握手都是由内核自动完成,不需要服务器进程去插手
热心网友
时间:2023-10-10 18:00
可能是你理解的有偏颇,我认为listen只是监听端口。
应该只是让这个端口处于一种打开的状态,而accept才是完成握手的部分。
愚见,我是做C++的