【发布时间】:2014-02-27 23:03:24
【问题描述】:
我在c中浏览了很多网络资料,也在互联网上搜索了很多,但仍然怀疑listen()中积压的目的是什么。
注意:- 我在 stackoverflow 中也经历了相同的问题/答案,但仍然很困惑。
谁能用简单的语言解释一下?
如果listen中的积压队列是待处理或不完整请求的数量,而不是我在积压参数中提供5个,仍然可以连接超过5个连接。
谢谢。
【问题讨论】:
我在c中浏览了很多网络资料,也在互联网上搜索了很多,但仍然怀疑listen()中积压的目的是什么。
注意:- 我在 stackoverflow 中也经历了相同的问题/答案,但仍然很困惑。
谁能用简单的语言解释一下?
如果listen中的积压队列是待处理或不完整请求的数量,而不是我在积压参数中提供5个,仍然可以连接超过5个连接。
谢谢。
【问题讨论】:
当您在端口上listen 时,在幕后 TCP 将完成您的连接(即 3 次握手)并将它们放入队列中,直到积压队列的大小。当您accept 连接时,您的 pgm 开始处理它,并且该插槽在队列中打开以用于另一个(潜在)连接。因此,如果您当前正在处理(已接受)5 个连接,并且您的 backlog 大小为 5,那么 tcp 层仍然可以建立另外 5 个连接。
【讨论】:
accept 时,您将(1)返回一个新的套接字连接(如果队列中有可用的连接); (2) 如果没有可用的连接,则阻塞(如果侦听套接字是非阻塞的,则立即返回 EAGAIN)。如果您接受连接的速度很慢并且您的队列已满,那么 tcp 将开始拒绝任何新的连接请求。