SO_REUSEADDR

转载:

http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html

http://www.cnblogs.com/mydomain/archive/2011/08/23/2150567.html

 

编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, 指明"地址已经使用中"。如果你的服务程序停止后想立即重 启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。 

 

1、一般来说一个端口释放后会等待两分钟之后才能再被使用SO_REUSEADDR是让端口释放后立即就可以被再次使用。

    SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态

2、SO_REUSEADDRSO_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_REUSEADDRSO_REUSEPORT等效。

使用这两个套接口选项的建议:

    在所有TCP服务器中在调用bind之前设置SO_REUSEADDR套接口选项;

当编写一个同一时刻在同一主机上可运行多次的多播应用程序时设置SO_REUSEADDR选项并将本组的多播地址作为本地IP地址捆绑。

    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,

   (const void *)&nOptval , sizeof(int)) < 0) ...

    Q:编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?

    A:这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。

    一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使用 SO_REUSEADDR 选项。【2】

 

1http://topic.csdn.net/u/20090103/16/a0414edb-b289-4c72-84da-39e155e8f4be.html

2

以下博客对这个问题进行了对答式的解答:

http://blog.sina.com.cn/s/blog_53a2ecbf010095db.html

3http://www.sudu.cn/info/html/edu/20050101/296180.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

唱响春天

春天&#xff0c;对就是在这个春天我在博客园里注册了这个ID。一直以来都没有在这里写点什么东西&#xff0c;我想在有空的时候是应该写点东西了。昨天看了江苏卫视的一个叫“绝对唱响”的节目&#xff0c;觉得很有意思&#xff0c;有些许感人的场面&#xff0c;有些触动&#…

不止 Windows 10!Windows 7/8 也能免费升级到 Windows 11

起初&#xff0c;微软宣布为 Windows 7、Windows 8 和 Windows 8.1 用户提供的 Windows 10 免费升级于 2016 年结束。Windows 11 免费升级近日&#xff0c;微软表示将继续支持从 Windows 7、Windows 8 和 Windows 8.1 用户免费升级到 Windows 10 或 Windows 11 &#xff0c;只要…

c语言求平衡因子,平衡二叉树(AVL树)的基本操作

0x00、平衡二叉树的定义平衡二叉树(AVL树)是一种特殊的二叉搜索树&#xff0c;只是在二叉搜索树上增加了对"平衡"的需求。假如一棵二叉搜索树&#xff0c;按照“1,2,3,4,5”的顺序插入数据&#xff0c;会发现二叉树甚至变成了一个线性的链表状结构&#xff0c;这样查…

学校老师绝对不会教的方法,让你的孩子拥有一个开挂般的人生!

比勤奋更重要的&#xff0c;是孩子的思维能力。从上幼儿园开始&#xff0c;很多父母很喜欢给孩子报各种兴趣班&#xff0c;比如钢琴班、英语班、乐高班、报各种各样的课程&#xff0c;就是希望孩子具有18般武艺&#xff0c;赢在起跑线上。其实除了外在的能力&#xff0c;不显山…

通过openpctv简单学习opkg安装与生成包的一些过程

http://linuxtoy.org/archives/openpctv-adding-full-tv-functionality-to-htpc.htmlOpenPCTV - 让你的HTPC拥有更全面的电视功能通过linuxtoy了解到openPCTV是使用opkg打包的获得源代码&#xff1a;git clone git://git.code.sf.net/p/openpctv/code openpctv-code下载完后发现…

保证一个用户已选取的记录不被其他用户选取

问题描述&#xff1a;  用ADO访问数据库&#xff0c;从一个表中取一定的记录&#xff08;比如20行&#xff09;&#xff0c;取出后在程序中使用&#xff0c;使用完后删除掉记录&#xff08;不用更新或删除记录&#xff09;。在多用户操作下(每个用户采用相同的操作)&#xff…

解答网友提问:如何构建动态表达式实现高级查询服务

上次我们介绍了"一秒创建高级查询服务"。前天&#xff0c;有网友在公众号后台问我&#xff0c;怎么使用动态表达式&#xff1a;我想应该是客户提出了更高的要求&#xff0c;查询的条件不仅限于大于、小于&#xff0c;更加多样化&#xff0c;需要动态组合成条件&#…

π!到底蕴藏了多少不为人知的秘密?|今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;赶紧检查一下π里面有没有你的秘密↓ ↓ ↓

23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc

数据结构(C语言版第2版_李云清)习题答案2012-12.doc第 1 章 绪论1.1 什么是数据结构&#xff1f;【答】&#xff1a;数据结构是指按一定的逻辑结构组成的一批数据&#xff0c;使用某种存储结构将这批数据存储 于计算机中&#xff0c;并在这些数据上定义了一个运算集合。1.2 数据…

动态内表

很多时候我们的alv报表列是动态的不确定&#xff0c;这样的话如果用平时那种办法肯定是不可行的。 最近有个需求刚好是alv动态的报表&#xff0c;所以现学现卖&#xff0c;总结经验一下&#xff1a; 有一般的列是固定的&#xff0c;还有一些列是动态的 必须要定义的语法如下 *存…

.net core 下的分布式事务锁

系统分布式锁的用法公司框架新增功能分布式锁&#xff1a;锁的性能之王&#xff1a;缓存 > Zookeeper > 数据库锁的实现实现原理&#xff1a;核心采用StackExchange.Redis的LockTake方法实现。支持同步获取锁&#xff0c;或者等待直到超时获取锁。/// <summary>///…

困死我了

又是周一,真想回到周六重新睡個大懶覺..提起來就有氣,可惡的施工負責人....困到現在,還沒精神做事情 转载于:https://www.cnblogs.com/LisaLiu/archive/2006/09/25/514132.html

n以内的素数c语言,关于求N以内素数的一点小问题(N小于一亿)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我个人觉得第二个可能是因为内存不够的缘故&#xff0c;于是照着网上的办法弄了一个辅助布尔型数组来改进一下&#xff0c;然后就变成这样了……结果是2The total of the primes are: 1代码如下#include#include#define N 10000usi…

刚刚!华为mate30 pro全球首发,三星黯然失色,iPhone11甚至都被吓降价了

全世界只有3.14 % 的人关注了青少年数学之旅众望所归&#xff0c;9月19日&#xff0c;华为在德国慕尼黑发布了Mate30系列。看完发布会&#xff0c;数据汪给大家总结了几个看点&#xff1a;1.全球一样的版本本次华为mate30系列采用的是EMUI 10系统&#xff0c;不会搭载谷歌旗下的…

cocos2d-x 实现跨平台的目录遍历

可能各位看官们有更好的方法&#xff0c;请不吝赐教。 #ifdef _WIN32 #include <io.h> #else #include <unistd.h> #include <stdio.h> #include <dirent.h> #include <sys/stat.h> #endif win32平台引用io.h里面的信息。 主要定义了一个void df…

c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值1.1.Hermite插值多项式如果对插值函数&#xff0c;不仅要求它在节点处与函数同值&#xff0c;而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值&#xff0c;这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的…

剖析XAML语言

这节剖析一下XAML(读作&#xff1a;zaml)——这一WPF中的UI设计语言。XAML在wpf中&#xff0c;UI部分使用xaml语言来编写&#xff0c;xaml语言是由xml语言派生而来的语言&#xff0c;所以在xaml中我们可以看到很多熟悉的特点&#xff1a;它也是使用标签构建页面&#xff0c;一个…

又是一年国庆日

祝伟大祖国繁荣昌盛! 愿伟大祖国的人民幸福安康! 转载于:https://www.cnblogs.com/Farseer1215/archive/2006/09/30/519256.html

中国最神秘的一所大学,它只存在过8年,却成了永远的第一

全世界只有3.14 % 的人关注了青少年数学之旅本文授权转载于公众号&#xff1a;物道精致生活&#xff08;wudaojieqi&#xff09;&#xff0c;转载请联系物道中国曾经有过这么一所大学&#xff1a;在抗日战争中仓促搭起&#xff0c;被称为“史上最穷”&#xff0c;校舍破旧得梁思…

ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...

NBA历史风卷云涌&#xff0c;巨星层出不穷&#xff0c;就算是称霸一时的巨星组合亦是多不胜数。默契的魔术师与贾巴尔&#xff0c;强悍的斯托克顿与马龙&#xff0c;绝对统治的乔丹与皮蓬&#xff0c;飞天遁地的科比与奥尼尔。就算是近十年&#xff0c;有如韦德与詹姆斯&#x…