可以基于OS支持的文件描述符的数量来建立这样的组合。例如,我的机器有以下限制 -
cat / proc / sys / fs / file-max 380594
当我们说听(sock_fd,5);这里5表示不会被拒绝连接的连接数。事实上,他们将处于待决状态。在这里,我们假设所有fd都用于套接字连接。然后389595th到389599th连接将进入挂起状态。这将在fd可用后处理。我是否正确?
答案 0 :(得分:1)
不完全。
Re(1),我不知道'主持人号'是什么意思。客户端可以有两个到给定服务器的连接,仅由源端口不同。因此,要唯一地标识连接,您需要客户端IP和端口号2元组(对),以及服务器IP和端口号2元组。
Re(2),这里有几个限制。每个打开的连接都需要一个文件描述符,但生活并不那么简单。例如,TIME_WAIT
中的连接可能已关闭其文件描述符,但从操作系统的角度来看仍然是一个“连接”,因为它们是精确地将杂散连接数据包关联起来的。此外,文件数量可能存在总体限制,但还有其他限制。例如,每个进程的开放fds数量有限(请参阅getrlimit
)。之前已多次询问此问题 - 请参阅What is the theoretical maximum number of open TCP connections that a modern Linux box can have和Increasing the maximum number of tcp/ip connections in linux
Re(3),不,积压工作不像那样,因为它是一个监听状态下的每个插槽。积压号码表示侦听套接字将确认尚未被接受的最大TCP连接数。当新TCP连接尝试在给定侦听套接字上进行连接时,操作系统必须对该挂起连接的存在进行排队,直到使用accept
将其传输到新套接字(以处理特定连接)。积压数字只是该队列的最大深度。这与file-max
无关,除非系统上的每个FD都被单个进程上的单个进程使用(这是一个相当不太可能的情况)。