为什么我们不能使用进程ID而不是采用我们绑定的端口

时间:2010-11-23 16:31:32

标签: sockets networking network-programming tcp

为什么我们不能使用进程id来获取我们在套接字编程中绑定的端口。 在socket编程中我们创建socket并获取套接字描述符并绑定到特定端口。对于多个连接,为什么我们不使用进程id,因为所有连接也是一个返回进程id的进程?

3 个答案:

答案 0 :(得分:8)

这是一个有趣的想法,但我认为这会引发一些问题:

  • 您如何知道要连接的进程ID?
  • 如果你想在同一个过程中收听多个“端口”怎么办?您只有一个进程ID。
  • IPv4和IPV6为端口ID分配16位,但进程ID通常为32位(或更大)值,因此它们不适合
  • 有许多程序没有网络方面,也不想要一个。是否会自动将网络通信路径实例化为潜在的安全问题?
  • 你可以做的一个技巧(特别是使用UDP多播或广播)有几个程序在同一个端口上监听(通过SO_REUSEPORT),这样当有人向该端口发送UDP数据包时,所有程序都会收到它。如果程序必须使用其(唯一的)进程ID号作为端口号,那么这个技巧将很难或不可能。

答案 1 :(得分:5)

首先,每个进程可以存在多个连接。其次,套接字API不依赖于任何OS进程API。

答案 2 :(得分:1)

因为TCP在规范中有端口号,但它没有进程ID。

为什么要在可以控制端口号时使用无法控制的processID?进程如何监听多个端口?