我想知道接受N个不同连接所需的侦听端口/服务器套接字的数量所需的最小开销是多少,每个连接使用在IP之上运行的不同传输协议,例如, TCP,SCTP,DCCP,UDP等
当然,一个直截了当的方法是拥有N个独立的服务器套接字(每个都通过调用带有相应 protocol
参数的 socket()
来创建),每个套接字都在一个唯一的端口上进行监听 . 但是,在同时使用多个协议的应用程序中实现此方法将非常不方便,因为客户端需要知道多个服务器端口 . 此外,在每个协议(仅具有相同客户端)仅对应一次的对等应用程序中,N个服务器套接字中的每一个仅接受单个(客户端)连接这一事实看起来像是一个巨大的开销(另外N个)套接字仅用于处理与单个对等客户端的N "real"连接 .
是否有可能做得更好,例如通过减少侦听服务器套接字的数量和/或侦听同一端口?
(为简单起见,您可以假设N = 2,一个连接是TCP,另一个连接是DCCP或UDP(请不要对无连接通信做出假设,因为DCCP是面向连接的) . )
编辑:我对N(客户端)连接不感兴趣,这些连接的文件描述符是由N调用 accept
返回的 . 问题是关于使这N个连接成为可能的额外开销(即必须至少有一个额外的服务器套接字监听传入连接) .
1 回答
总结一下上面的评论中所说的:自从
调用我们必须指定
protocol
,我们不能使用一个套接字用于多个协议 . 我们也不能写见SOCK_RAW Demystified .
关于使用具有不同套接字的相同端口:这种可能性因系统而异;即G . 请参阅HP-UX(
man 7f inet
):与Linux(
man ip
):