socket程序listen之后,不写accept函数,会是怎样一种情况?

socket程序listen之后,不写accept函数,会是怎样一种情况?

int listen(int sockfd, int backlog);

backlog,就是默认最大的等待队列长度


不用accept 最大的监听个数就是这个backlog了,因为一直没有accept,所以这个里的队列会一直在,不会减少虽然这个backlog是可以手动设置的,但是linux是最大值128,如果超过这个数目了,就是无效的,最大也就128.

在被动状态的socket有两个队列,一个是正在进行三次握手的socket队列,一个是完成三次握手的socket队列。在握手完成后会从正在握手队列移到握手完成的队列,此时已经建立连接。accept就是从已经完成三次握手的socket队列里面取,不accept客户端能完成的连接就是此队列的大小.

所以,不accpet只是不能继续通讯而已,三次握手是协议栈做的,不是api控制的,否则,你考虑效率要多低,就好像每次这种贴都会争论什么阻塞send什么时候返回,阻塞recv什么时候返回。

listen()维护两个队列,一个是未完成三次握手的,一个是已完成三次握手的,accept()是从已完成三次握手的队列中取出一个而已!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值