linux下的listen 第二个参数为什么没用?

我写了一个echo的tcp服务器(客服发什么消息,服务回什么消息),listen设置为3,我理解的是,只能有3个客户端连接,可是我不论建立几个客户端都能登陆,都能得到回应... 我写了一个echo 的 tcp服务器(客服发什么消息,服务回什么消息),listen 设置为3, 我理解的是,只能有3个客户端连接,可是我不论建立几个客户端都能登陆,都能得到回应,这是为什么啊?那第二个参数到底有什么用啊? 展开
 我来答
百度网友c61d935a2
推荐于2017-09-10 · TA获得超过224个赞
知道答主
回答量:103
采纳率:0%
帮助的人:150万
展开全部
listen的第二个参数并不是用来限制程序的最大连接数的。
而是TCP模块允许的已完成三次握手过程(TCP模块完成)但还没来得及被应用程序accept的最大链接数.

举例来说假说你的服务器很忙或干脆暂停了,这时如果有四个TCP客户端尝试TCP链接过来,而你listen的第二个参数为3,则底层TCP模块会依次完成前面3个客户端的握手过程,并把其放入一个缓存区中等待服务器应用程序的accept(此时这三个客户程序的connect会调用成功表示链接已建立)。对于第四个链客户端,TCP模块什么也不做,也不会返回icmp数据包。实际上第四个链接已被TCP模块丢弃。假如此时服务器还在暂停之中但客户端的connect已成功返回则客户端会认为可以向服务器发送数据了,这此数据会被服务器端的TCP模块缓存下来,待服务器程序从暂停中恢复过来时读取.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式