1

What is the significance of a listen queue(second argument in listen call) in a multi threaded TCP server?

It's a little confusing because why do we need a queue, when we have multiple threads to deal with different clients?

4

2 回答 2

2

来自 MSDN: http: //msdn.microsoft.com/en-us/library/ms739168 (v=vs.85).aspx

SOMAXCONN 的 backlog 值是一个特殊常量,它指示负责 socket 的底层服务提供者将挂起连接的队列长度设置为最大合理值。

在 Windows Sockets 2 上,此最大值默认为一个较大的值(通常为数百或更多)。在蓝牙应用程序中调用监听函数时,强烈建议对 backlog 参数使用低得多的值(通常为 2 到 4),因为只接受少数客户端连接。这减少了分配给侦听套接字使用的系统资源。同样的建议也适用于只需要少量客户端连接的其他网络应用程序。

侦听功能通常由一次可以有多个连接请求的服务器使用。如果连接请求到达并且队列已满,客户端将收到一个错误,指示 WSAECONNREFUSED。

TCP 服务器是多线程的这一事实并不重要,因为这个队列在应用程序空间之外,即在操作系统和应用程序之间。

于 2011-03-25T05:03:42.580 回答
1

理解概念;考虑以下示例,

您知道 TCP 进行 3 次握手以建立连接。当远程客户端连接到您的 TCP 服务器时,它会发送 SYN 数据包,您的服务器会回复 SYN-ACK 数据包,然后远程客户端再次发送 ACK 数据包,然后建立连接。因此,您的应用程序在完全建立后获得连接。因此,在您的连接完成一半之前(我的意思是您从远程客户端收到 SYN 并且您已经发送了 SYN-ACK 并且您正在等待最后一个 ACK​​),您的应用程序将不会接受连接。因此,可能有许多远程客户端试图连接到您的服务器,并且您的侦听队列中可能有许多半完成的连接。

我希望它解释了监听队列。

于 2011-03-27T08:37:02.390 回答