我可以重用连接到不同主机的(临时)端口吗?

Ala*_*met 5 c sockets network-programming

操作系统是否可以重用源端口号来连接到不同的目标地址/端口组合?

如果我connect()有足够的主机,并保持这些连接打开,最终我将耗尽唯一的源端口,耗尽临时范围、非根范围(1025-65,535;假设非根)或绝对范围(0- 65,535)。我想知道这些是否代表了我可以同时连接的主机数量的真正限制。我对标准的承诺(或不承诺)以及 Linux 上的现实(Windows 会是一个额外的好处)感兴趣。

我知道打开这么多连接可能会遇到许多其他限制;这是一个不同的问题。如果重要的话,如此大量的连接将被分配给同样大量的进程。bind()我对请求临时端口而不是手动端口的情况感兴趣。如果在“正常”情况下端口不会被重用,是否有方法从用户空间更改该行为(此时到bind()特定点成为一种选择)?

Chr*_*odd 5

默认情况下,内核不会将任何正在使用的端口重用为临时端口,如果同时使用 64K 以上的端口,这可能会导致失败。

SO_REUSEADDR仅当没有端口正在侦听(您不能重复使用侦听端口)并且将每个套接字连接到不同的远程地址时,此功能才有效。