SO_REUSEADDR和SO_REUSEPORT
来源:互联网 发布:c语言程序苏小红实验题 编辑:程序博客网 时间:2024/06/05 05:21
http://blog.chinaunix.net/uid-26851094-id-3318435.html
http://blog.chinaunix.net/uid-28587158-id-4006500.html
SO_REUSEADDR和SO_REUSEPORT
SO_REUSEADDR提供如下四个功能:SO_REUSEADDR允许启动一个监听服务器 并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器 时出现,若不设置 此选项,则bind时将出错。
SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。
SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。
SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言(TCP不支持多播)。
SO_REUSEPORT选项有如下语义:
此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才效。
如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。
使用这两个套接口选项的建议 :
在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项;
当编写一个同一时刻在同一主机上可运行 多次的多播应用 程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。
总结:
SO_REUSEADDR socketA socketB Result--------------------------------------------------------------------- ON/OFF 192.168.0.1:21 192.168.0.1:21 Error (EADDRINUSE) ON/OFF 192.168.0.1:21 10.0.0.1:21 OK ON/OFF 10.0.0.1:21 192.168.0.1:21 OK OFF 0.0.0.0:21 192.168.1.0:21 Error (EADDRINUSE) OFF 192.168.1.0:21 0.0.0.0:21 Error (EADDRINUSE) ON 0.0.0.0:21 192.168.1.0:21 OK ON 192.168.1.0:21 0.0.0.0:21 OK ON/OFF 0.0.0.0:21 0.0.0.0:21 Error (EADDRINUSE)
SO_REUSEADDR :
1udp允许完全重复的端口
2.用在tcp上,不允许完全重复的捆绑,
(a)但是监听的绑定 可以与以前建立的将此端口用做他们的本地端口的连接 重复;
- 一个监听(listen)server已经启动
- 当有client有连接请求的时候,server产生一个子进程去处理该client的事物.
- server主进程终止了,但是子进程还在占用该连接处理client的事情.虽然子进程终止了,但是由于子进程没有终止,该socket的引用计数不会为0,所以该socket不会被关闭.
- 监听server程序重启.
监听的绑定与 子进程的socket 使用的本地ip和端口 是重复的,但是SO_REUSEADDR后,监听服务器可以启动
(b)SO_REUSEADDR:ON 0.0.0.0:21 192.168.1.0:21 OK
(c) 在time_wait的状态下允许其重复绑定
监听的绑定与 子进程的socket重复,但是SO_REUSEADDR
0 0
- SO_REUSEADDR和SO_REUSEPORT
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT
- SO_REUSEADDR 和 SO_REUSEPORT
- SO_REUSEADDR和SO_REUSEPORT
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEPORT和SO_REUSEADDR
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT的区别
- so_reuseaddr & so_reuseport
- 关于SO_REUSEADDR和SO_REUSEPORT的使用
- Set SO_REUSEADDR & SO_REUSEPORT options
- 内部类
- sicily 1152. 简单的马周游问题
- 採購單單別/稅別選錯,怎麼辦?
- SQL 关于LEFT JOIN关键字解析(多表查询)
- SOAPUI压力测试的参数配置
- SO_REUSEADDR和SO_REUSEPORT
- 使用PHP搭建自己的MVC框架
- TIPTOP實務--退貨折讓向廠商收款的作法(支票)
- sicily 1153. 马的周游问题
- Android字体多样式和动画TextDrawable
- Python爬虫:动态网页抓取淘宝“淘女郎”照片
- TIPTOP實務--退貨折讓向廠商收款的作法(匯款)
- Android如何防止apk程序被反编译
- 再没有任何国家政府比今天的中国政府蒙受更多的冤屈了