我正在阅读以下关于“so_reuseaddr 到底做了什么?”的答案。
这个套接字选项告诉内核,即使这个端口很忙(处于 TIME_WAIT 状态),继续并重用它。如果它很忙,但处于另一个状态,您仍然会收到地址已在使用错误。如果您的服务器已关闭,然后在其端口上的套接字仍处于活动状态时立即重新启动,这将很有用。您应该知道,如果有任何意外数据进入,它可能会使您的服务器感到困惑,但是虽然这是可能的,但不太可能。
有人指出,'一个套接字是一个 5 元组(原型、本地地址、本地端口、远程地址、远程端口)。SO_REUSEADDR 只是说您可以重用本地地址。5 元组仍然必须是唯一的!迈克尔·亨特 (mhunter@qnx.com)。这是真的,这就是为什么您的服务器不太可能看到意外数据的原因。危险是这样一个 5 元组仍然在网络上四处飘荡,当它四处弹跳时,来自同一客户端的新连接,在同一系统上,碰巧获得了相同的远程端口。Richard Stevens 在 #2.7 '请解释 TIME_WAIT 状态'中对此进行了解释。
我只是无法得到最后几行The danger is....TIME_WAIT state.
它说如果网络上仍然有相同的浮动元组......但是如果 1 小时后有相同的元组怎么办?看不懂,谁能解释一下?