当前位置:  开发笔记 > 运维 > 正文

SO_REUSEADDR的用例是什么?

如何解决《SO_REUSEADDR的用例是什么?》经验,为你挑选了2个好方法。

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



1> Brian R. Bon..:

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

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

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

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

(来源)


对于UDP,SO_REUSEADDR用于多播.

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

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

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

(来源)


需要澄清.侦听端口不会进入TIME_WAIT,但可能会接受连接.TIME_WAIT不是为了确保传输所有数据,而是为了避免与相同端点之间的后续连接混淆.

2> dwc..:

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

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有