端口为零的绑定将绑定到空闲端口.这是便携式吗?

Mic*_*leA 5 c sockets port portability bind

我希望我的程序绑定到一个自由端口.

Google告诉我,使用port = 0的绑定会这样做,但我还没有发现这是否可以保证在任何系统上运行(特别是Windows/Linux).

有人可以链接一个说这个的文档吗?

Jef*_*man 8

这是 AF_INET 地址族的标准、记录的行为:

http://man7.org/linux/man-pages/man7/ip.7.html

请参阅 ip_local_port_range,其中包含以下内容:

    An ephemeral port is allocated to a socket in the following circumstances:

          *  the port number in a socket address is specified as 0 when
             calling bind(2);
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 5

它在4.2BSD套接字API中肯定是"标准",大多数其他所有实现都是从这个API中派生出来的,但我并不知道任何实际上这样说的正式规范.


R..*_*R.. 5

据我所知,它是通用的,但我在标准中找不到任何文字说明它是通用的。另一种可能更便携的替代方法是使用getaddrinfo空服务名称指针和AI_PASSIVE标志。这保证会给你一个sockaddr你可以bind做到的。这也是让管理员选择绑定哪个本地 ip(v4 或 v6)地址的正确方法。