能否不同udp socket绑定到同一IP地址和port

http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-4.html

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/b8a3395f-938b-4347-b6c3-431851e68884/sockets-multicastbroadcast-udp-tcp-soreuseaddr-soreuseport-and-soexclusiveaddruse

The main differences between BSD and Windows are conveniently described on https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t. According to that, one would say that a solution:

1) For BSD "0" and for Windows "SO_EXCLUSIVEADDRUSE"

2) For BSD "SO_REUSEPORT | SO_REUSEADDR" and for Windows "SO_REUSEADDR"

https://docs.microsoft.com/zh-cn/windows/desktop/WinSock/using-so-reuseaddr-and-so-exclusiveaddruse

Using SO_REUSEADDR

The SO_REUSEADDR socket option allows a socket to forcibly bind to a port in use by another socket. The second socket calls setsockopt with the optname parameter set to SO_REUSEADDR and the optval parameter set to a boolean value of TRUE before calling bindon the same port as the original socket. Once the second socket has successfully bound, the behavior for all sockets bound to that port is indeterminate. For example, if all of the sockets on the same port provide TCP service, any incoming TCP connection requests over the port cannot be guaranteed to be handled by the correct socket — the behavior is non-deterministic. A malicious program can use SO_REUSEADDR to forcibly bind sockets already in use for standard network protocol services in order to deny access to those service. No special privileges are required to use this option.

If a client application binds to a port before a server application is able to bind to the same port, then problems may result. If the server application forcibly binds using the SO_REUSEADDR socket option to the same port, then the behavior for all sockets bound to that port is indeterminate.

The exception to this non-deterministic behavior is multicast sockets. If two sockets are bound to the same interface and port and are members of the same multicast group, data will be delivered to both sockets, rather than an arbitrarily chosen one.

windows没有SO_REUSEPORT选项,只有SO_REUSEADDR,但

windows的SO_REUSEADDR 等同于BSD的SO_REUSEADDR和SO_REUSEPORT

但如果两个socket同时绑定到同一地址和同一port的话,这些socket的行为是不确定的,主要体现在接收数据上,数据会投递给随机选择的一个socket。

所以,两个socket绑定到同一地址和同一port,同时用udp接收数据的话,只有一个socket能够收到数据。

这样是不行的。只能用一个socket。

原文地址:https://www.cnblogs.com/yanhc/p/10923505.html

时间: 2024-10-28 05:17:34

能否不同udp socket绑定到同一IP地址和port的相关文章

Linux socket编程 DNS查询IP地址

本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址.所以这次的实验主要就是解析DNS报文.同时也需要正确的填充请求报文.如果代码有什么bug,欢迎指正啊.代码排版有点乱... 本文有以下内容 DNS报文的填充和解析 利用socket API传输信息 一.填充DNS请求报文 随便百度一下,就可以知道DNS报文的格式.所以这里只介绍如何填充DNS报文. 首先是填充报文首部: ? 1 2 3 4 5 6 7 8 9 /* 填充首部的格式大致相同,下面的

Tomcat绑定多个IP地址 多域名绑定

http://blog.csdn.net/stevenyanzhi/article/details/6029776 Tomcat绑定多个IP地址 如果一台服务机上有多个IP地址又有多个工程如何一个IP地址对应绑定每一个工程呢? 下面做了一个简单的记录: 找到Tomcat 5.0/conf/server.xml 搜索<Host name="localhost1" debug="0" appBase="/webapps"        unpa

linux系统单网卡绑定多个IP地址

说明: 单网卡绑定两个IP地址,电信和联通,目的:是为了当电信出故障联通正常使用. 系 统 IP地址 子网掩码 网关 CentOS 6.3_64bit eth0:116.18.176.19 255.255.255.0 192.168.1.1 eth0:0:172.188.174.20 255.255.255.0 192.168.1.1 … … … 1.linux的网络设备的存储路径是/etc/sysconfig/network-scripts进入目录: [[email protected] ~]

Android中验证输入是否为汉字及手机号,邮箱验证,IP地址可用port号验证

1,验证是否为汉字 // 验证昵称 private boolean verifyNickname() { String nickname = edt_username.getText().toString(); if (nickname == null || nickname.length() == 0) { edt_username.setError("不能为空"); return false; } int len = 0; char[] nickchar = nickname.to

windows 2003一个网卡绑定多个IP地址

1.打开“网络连接”,选中需要添加多个IP的“本地连接”-->右键-->“属性”: 2.从“常规”中找到“Internet 协议(TCP/IP)属性”: 3.选择手动设置IP地址.网关.掩码等信息,如IP地址192.168.1.10 ,子网掩码255.255.255.0 ,网关192.168.1.1: 4.点下面的“高级”按钮,在高级中的“IP设置”→“IP地址”栏下点“添加”按钮,输入你想绑定的IP地址即可: 在此必须说明,添加的多个IP地址,如果选择下方的“自动跃点计数”(如下图)情况下,

Redis绑定多个ip地址

学习了:https://www.zhihu.com/question/20346112/answer/17157379 注意,用空格进行分隔 bind 127.0.0.1 10.1.111.111 如果需要绑定任意IP, 学习了:https://zhidao.baidu.com/question/1640185214507449060.html bind 0.0.0.0 原文地址:https://www.cnblogs.com/stono/p/9009307.html

关于绑定IP地址与端口号的见解

"端口",通俗地讲就是一个通信通道的"门",各种计算机服务和通信都是通过特定的端口与外部计算机进行通信,像常见的WWW.FTP.Telnet服务一样. 随着计算机网络技术的发展,原来物理上的接口(如键盘.鼠标.网卡.显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题.TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术.因为在TCP/IP协议中引入了一种称之为&quo

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

Socket网络编程(TCP/IP/端口/类)和实例

Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而