我正在尝试使用来自两个应用程序的端口,并让每个应用程序从一组不同的IP地址接收数据包.为了实现这一点,我使用了SO_REUSEPORT和SO_ATTACH_REUSEPORT_CBPF套接字选项.我的代码如下:

parentfd = socket(AF_INET, SOCK_STREAM, 0);

if (parentfd < 0)

error( "ERROR opening socket");

struct sock_filter code[]={

{ 0x28, 0, 0, 0x0000000c },

{ 0x15, 0, 3, 0x00000800 },

{ 0x20, 0, 0, 0x0000001a },

{ 0x15, 2, 0, 0xc0a8ff01 },

{ 0x6, 0, 0, 0x00000000 },

{ 0x6, 0, 0, 0x00040000 },

{ 0x6, 0, 0, 0x00000001 },

};

struct sock_fprog bpf = {

.len = ARRAY_SIZE(code),

.filter = code,

};

if (setsockopt(parentfd, SOL_SOCKET, SO_REUSEPORT, (const void *)&optval,sizeof(optval)))

error("ERROR setting SO_REUSEPORT");

if (setsockopt(parentfd, SOL_SOCKET, SO_ATTACH_REUSEPORT_CBPF, (const void *)&bpf, sizeof(bpf)))

error("ERROR setting SO_ATTACH_REUSEPORT_CBPF);

我还有一个不同的进程只使用SO_REUSEPORT标志来侦听同一个端口.从IP 192.168.255.1的机器上运行echo 1234 | ncat 192.168.255.150 1234.基于我的过滤器,我希望第二个进程可以接收来自该IP地址的所有流量.然而,它都是第一个收到的.当我将过滤器更改为简单时:

struct sock_filter code [] = {

{0x6,0,0,0×00000001},

};

它按预期工作,所有数据包都由第二个进程接收.知道为什么会这样吗?

linux so reuseport,linux – SO_ATTACH_REUSEPORT_CBPF套接字选项意外行为相关推荐

  1. linux 套接字选项定义

    2019独角兽企业重金招聘Python工程师标准>>> linux 套接字选项定义 2011-07-28 14:31 1.closesocket(一般不会立即关闭而经历TIME_WA ...

  2. Linux 套接字编程 套接字选项SO_BINDTODEVICE 绑定接口 示例

    man socket(7)里对该选项的描述: SO_BINDTODEVICEBind this socket to a particular device like "eth0", ...

  3. LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .

    const int udp_recvbufsize = 384 * 1024 ; int result = ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, ...

  4. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  5. Linux网络编程:原始套接字的魔力【续】

    如何从链路层直接发送数据帧        本来以为这部分都弄完了,结果有朋友反映说看了半天还是没看到如何从链路层直接发送数据.因为上一篇里面提到的是从链路层"收发"数据,结果只&q ...

  6. linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国

    原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...

  7. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  8. linux网络编程之SCTP套接字常用接口

    转载地址: oracle开发帮助文档:http://docs.oracle.com/cd/E19253-01/819-7052/index.html SCTP 套接字接口 当 socket() 调用为 ...

  9. 套接字选项SO_LINGER

    在说明套接字选项SO_LINGER之前,我们来先看一个问题.如果发送缓冲区中还有数据没有发送到对方协议栈,此时close发送端的socket会发生什么,下面代码给出答案. 服务端: #include ...

最新文章

  1. 征集 | 国家标准《信息安全技术 健康医疗信息安全指南》征求意见
  2. Winform中设置ZedGraph因设置小刻度导致的竖直虚线显示过多
  3. 科大星云诗社动态20210407
  4. java阻塞超时_JAVA防线程阻塞(超时控制)
  5. 基于xilinx vivado的XADC IP设置使用详解
  6. 存储器芯片巨头动态观察:三星、美光、SK海力士都在做什么?
  7. java定时器小程序_【微信小程序】使用setTimeout试试定时器
  8. SQL_Server_2008完全学习之第六章数据查询和管理
  9. Native Instruments Maschine 2 v2.14.7 WiN-MAC 节奏音乐制作软件含拓展
  10. 【Proteus仿真】基于STC15单片机简易数码管定时器时钟
  11. [APIO2014]序列分割
  12. 11年22部!漫威宇宙剧情与电影时间线梳理
  13. C语言中时间相关函数总结
  14. 如何修改Bootstrap Table中table-striped的颜色
  15. SQL:查询结果升序、降序排列
  16. 什么是入侵检测系统?有哪些分类?
  17. 【Java笔记】——将晦涩难懂的IO流形象化
  18. 1580_AURIX_TC275_SMU模块初步
  19. 关于Java为什么不推荐使用 import *导包这件小事
  20. linux运行lnk,LNK 文件扩展名: 它是什么以及如何打开它?

热门文章

  1. 解决:ODNC驱动程序管理器:未发现数据源名称并且未指定默认驱动器问题?
  2. MATLAB 多项式的四则运算与导数运算
  3. react集成react-pdf获取文件流预览下载pdf,展示电子签章
  4. LENOVO联想笔记本电脑 拯救者Y520-15IKBN(80Y5)原装Win10系统文件,恢复出厂OEM系统
  5. 风尚前端学习-网页HTML引入element-ui库
  6. linux shell random 3,Linux-Shell(三)
  7. arcsde service(esri_sde)服务启动后又停止
  8. 收集银行卡号前六位识别发卡行和卡的种类(不全)
  9. [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:qqs' d
  10. win10计算器需要新应用打开此calculator/calc