bind() - 如何在同一个套接字上多次调用bind()

时间:2017-04-10 19:06:36

标签: sockets tcp bind sockaddr-in

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

2 个答案:

答案 0 :(得分:3)

您无法再次在已绑定的套接字上调用bind()。绑定套接字后,无法更改其绑定。

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

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

答案 1 :(得分:0)

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