1

我在已将端口值设置为 0 的地址上使用 bind()。我知道通过这种方式,它将随机端口绑定到该地址。但我只想要值 x 的端口,使得 (x >= 0 && x <= 1023) || (x >= 49152) 被选中,但我注意到,在可以选择的随机端口中,也有端口 > 49152 。但是,如果我重新调用 bind() ,它会给出错误:无效参数。如何在没有给出无效参数错误的情况下重新调用 bind() 函数,或者如何以另一种方式解决此问题?提前非常感谢。

4

2 回答 2

3

您不能bind()在已绑定的套接字上再次调用。一旦绑定了套接字,就不能更改其绑定。

绑定到端口 0 将绑定到可用的随机临时端口,临时端口的范围由操作系统控制,而不是应用程序。某些操作系统确实提供了配置值来设置范围,但您需要成为管理员才能更改它。

要执行您要查找的操作,请根本不要绑定到端口 0。而是绑定到特定的所需端口,如果它不可用,bind()则将失败,您可以通过使用不同的端口再次调用来处理错误bind(),根据需要重复,直到绑定成功或您已用尽所需端口列表。

于 2017-04-10T21:08:28.793 回答
0

你不能。您必须关闭套接字并重新开始。您不能对获得的端口如此挑剔。他们的系统会给你它给你的任何东西。

于 2017-04-10T19:15:05.473 回答