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

Sockets bind()-如何在同一套接字上多次调用bind(),sockets,tcp,bind,sockaddr-in,Sockets,Tcp,Bind,Sockaddr In,我在已将端口值设置为0的地址上使用bind()。我知道,通过这种方式,它将随机端口绑定到地址。但我只希望选择值为x的端口(x>=0&&x=49152),但我注意到,在可以选择的随机端口中,还有端口>49152。 但是,如果我重新调用bind(),它会给出错误:参数无效。 在没有给出无效参数错误的情况下,如何重新调用bind()函数,或者如何以另一种方式解决此问题? 事先非常感谢。你不能。您必须关闭插座,然后重新启动。你不能对你得到的港口如此挑剔。系统会给你它给你的任何东西。你不能在已经绑定的套接

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

你不能。您必须关闭插座,然后重新启动。你不能对你得到的港口如此挑剔。系统会给你它给你的任何东西。

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

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


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

您的问题是,不是。如果您知道要将()绑定到哪个端口,那么最好将该端口提供给bind()调用,而不是0。如果端口已经在使用中,bind()调用将失败,然后您可以使用其他端口号重试。@EJP似乎
unix sockets
是一个非常好的标记,它没有说明它是关于TCP的;它也可能是关于UDP套接字的。有时候,挑三拣四是有道理的。例如,FTP服务器可能只想使用一小部分端口进行
PASV
传输,因此它必须能够控制端口范围的下限值和上限值。@在这种情况下,您应该循环尝试绑定的端口,直到成功。绑定到零端口,然后抱怨结果是徒劳的,本质上是一种矛盾。