【发布时间】:2013-12-18 14:56:29
【问题描述】:
我想知道就接受 N 个不同连接所需的侦听端口/服务器套接字的数量而言,所需的最低开销是多少,每个连接都使用在 IP 之上运行的不同传输协议,例如TCP、SCTP、DCCP、UDP等
当然,一个简单的方法是拥有 N 个独立的服务器套接字(每个通过调用 socket() 并使用适当的 protocol 参数创建),每个都侦听一个唯一的端口。但是,在同时使用多个协议的应用程序中实现这种方法会非常不方便,因为客户端需要知道多个服务器端口。此外,在一个对等应用程序中,每个协议只对等一次(使用相同的客户端),N 个服务器套接字中的每一个只接受一个(客户端)连接的事实看起来像是一个巨大的开销(N 个额外的引入套接字纯粹是为了处理到单个对等客户端的 N 个“真实”连接)。
是否有可能做得比这更好,例如通过减少侦听服务器套接字的数量和/或在同一端口上侦听?
(为简单起见,您可以假设 N=2,一个连接是 TCP,另一个是 DCCP 或 UDP(请不要假设无连接通信,因为 DCCP 是面向连接的)。)
编辑:我对 N 个(客户端)连接不感兴趣,这些连接的文件描述符由 N 次调用 accept 返回。问题在于使这 N 个连接成为可能的额外开销(即必须至少有一个额外的服务器套接字来侦听传入连接)。
【问题讨论】:
-
无法想象这样的设计能达到什么目的......
-
'客户端需要知道多个服务器端口' - 为什么?它只需要知道它希望使用的服务。
-
如果您想在 LAN 应用程序中广播大量数据,例如,使用 UDP 等协议是有意义的,只要您不关心数据包丢失和重新排序。
-
@leden 然后我看不出你真正在问什么。如果您希望客户端在 N 个不同的任意传输上进行连接,则客户端会创建它想要连接的任意数量的套接字。服务器侦听具有明确定义的端口号的 N 个套接字。 (或者,正如您所说,您可以只有一个定义明确的协议/端口,例如 TCP,然后按需创建其他协议/端口,然后将端口号发回)
-
@leden 好的。答案是不。 socket API 没有这个概念。
标签: sockets unix posix protocols transport