【发布时间】:2013-11-14 07:24:37
【问题描述】:
我正在阅读以下关于“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 小时后还有相同的元组怎么办?看不懂,谁能解释一下?
【问题讨论】: