SO_REUSEADDR的用例是什么?

时间:2009-02-23 14:58:22

标签: c sockets tcp udp

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

2 个答案:

答案 0 :(得分:25)

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

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

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

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

Source


对于 UDP SO_REUSEADDR用于多播。

  

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

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

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

Source

答案 1 :(得分:7)

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