使用SO_REUSEADDR?

我已经使用SO_REUSEADDR让我的服务器终止重启而没有抱怨套接字已经在使用中。 我想知道是否还有SO_REUSEADDR其他用途? 有没有人使用套接字选项除了上述目的?

对于TCP:主要目的是在同一地址上重新启动已关闭/已终止的进程。

需要该标志,因为端口进入TIME_WAIT状态以确保传输所有数据。

如果两个套接字绑定到同一个接口和端口并且是同一个多播组的成员,则数据将被传递到两个套接字。

我想另一种用法是尝试拦截数据的安全攻击。

( 来源 )


对于UDP: SO_REUSEADDR用于多播

如果bind()前面有多个进程可以绑定到同一个SOCK_DGRAM UDP端口:

int one = 1; setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one))

在这种情况下,发往共享端口的每个传入多播或广播UDP数据报都将传送到绑定到该端口的所有套接字。

( 来源 )

另一个主要用途是允许多个套接字bind()到UDP上的同一个端口。 您可能认为不会出现这种情况,但有时多个应用程序可能希望侦听具有给定端口号的广播/多播地址。 它还允许一个绑定到通配符地址,同时还绑定到特定地址。 例如,Apache可能绑定到*:80和10.11.12.13:80