博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下 端口复用的问题
阅读量:6832 次
发布时间:2019-06-26

本文共 1688 字,大约阅读时间需要 5 分钟。

hot3.png

解决性参考:Currently, Linux does not allow reuse of same local port for both TCP server and TCP client.而且小测试程序能够成功,和我的库测试程序的差别也就在这一点了,因此接受连接和发起连接的端口分开即可。

其他资料:
这个是捣乱最大的: 请问:linux难道没有端口重用吗?我用SO_REUSEPORT报找不到
已经搞定,需要改/usr/include/asm/socket.h:/* To add :#define SO_REUSEPORT 15 */
freebsd与linux下bind系统调用小结
只考虑AF_INET的情况(同一端口指ip地址与端口号都相同)
1.freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项。
2.freebsd下,使用SO_REUSEPORT选项,两个tcp的socket可以绑定同一个端口;同样,使用SO_REUSEPORT选项,两个udp的socket可以绑定同一个端口。
3.linux下,两个tcp的socket不能绑定同一个端口;而如果使用SO_REUSEADDR选项,两个udp的socket可以绑定同一个端口。
4.freebsd下,两个tcp的socket绑定同一端口,只有第一个socket获得数据。
5.freebsd下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有第一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。
6.linux下,两个udp的socket绑定同一端口,如果数据包的目的地址是单播地址,则只有最后一个socket获得数据,而如果数据包的目的地址是多播地址,则两个socket同时获得相同的数据。
Unix网络API
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地址捆绑。
What is the difference between SO_REUSEADDR and SO_REUSEPORT?
from: 

 

http://general.blog.51cto.com/927298/344677/

http://blog.csdn.net/lianghe_work/article/details/45540811

转载于:https://my.oschina.net/mickelfeng/blog/968250

你可能感兴趣的文章
mysqlsla日志分析工具
查看>>
linux 制作BT种子并获取BT种子信息
查看>>
Building C Projects
查看>>
iOS:XCode 4.2开始Objective-C支持ARC
查看>>
如何解决笔记本键盘的虚拟键盘问题
查看>>
dabo aui editra 三个软件(框架or应用)之间有关系
查看>>
brew使用
查看>>
Swift语言快速入门
查看>>
学LIUNX的常用英语补习
查看>>
单点登录CAS解决方案<一>:纯净CAS-Server
查看>>
linux 下配置mysql主从同步的步骤
查看>>
CodeIgniter pdo与postgres原生驱动对bool类型取值是不同的
查看>>
Mysql 数据库表区分大小写问题
查看>>
Linux中命令选项及参数简介
查看>>
什么是openstack的metadata
查看>>
面向海量数据的高并发高可用分层系统架构设计
查看>>
五、JAVA基础--异常、断言、日志
查看>>
利用位运算和指针实现的交换两个数的程序
查看>>
论文规范
查看>>
跟 UMU 一起玩 OpenWRT(高级篇2):不拆机刷不死 U-Boot
查看>>