23

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

4

2 回答 2

41

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

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

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

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

来源


对于UDPSO_REUSEADDR用于多播。

如果前面有以下内容,则可以有多个进程绑定到同一个SOCK_DGRAMUDP 端口:bind()

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

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

来源

于 2009-02-23T15:03:03.340 回答
10

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

于 2009-02-23T15:04:32.417 回答