boost::asio::ip::tcp/udp::socket::release 函数为什么限制 Windows 8.1 才可以调用?

news/2024/5/18 14:09:38 标签: tcp/ip, udp, 网络协议

如本文题目所示,这是因为只有在 Windows 8.1(Windows Server 2012 RC)及以上 Windows 操作版本才提供了运行时,修改/删除完成端口关联的ABI接口。

boost::asio 在 release 函数底层实现之中是调用了  FileReplaceCompletionInformation 函数来删除完成端口关联的。

微软官方的MSDN文档,上面有明确说明。

FILE_INFORMATION_CLASS (wdm.h) - Windows drivers | Microsoft Learn

FileReplaceCompletionInformation
Value: 61
A FILE_COMPLETION_INFORMATION structure to change or remove the completion port associated with a file handle. This value is available starting with Windows 8.1.

所以如果想要切 io_context 驱动线程,可能就以下几个思路。

1、共享同一个 io_context,在上层自己控制 strand 来切

2、多个 io_context 的情况,想要把 socket 交给另一个 io_context,可以考虑二次转发来解决。

3、做成多模式,Windows 8.1 以下的版本,走原本流程(不转移 io_context),Windows 8.1及以上可以转移 io_context 驱动。

4、如果能够提前知道某一个 sockfd,最终会放在那个 io_context 上是最好的。

如果修改 asio 的源代码,如果调用失败就忽略呢?也是不行的哟,因为 iocp 没有解除关联,所以就会出现致命问题,因为没法重新 assign 附加到 iocp 上。


http://www.niftyadmin.cn/n/5458708.html

相关文章

游戏赛道新机会:善用数据分析,把握游戏赛道广告变现良机 | TOPON变现干货

12月10日,由罗斯基联合TopOn、钛动科技共同主办的《游戏赛道新机会》主题系列沙龙在武汉举办。活动邀请了国内外多家业内知名公司的负责人到场分享,现场嘉宾分别从自己擅长的领域出发,通过数据分析,案例复盘等多个维度方向进行讲解…

面试题:JVM的垃圾回收

一、GC概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)。 有了垃圾回收机制后,程序员只需要关…

算法学习 | day28/60 买卖股票的最佳时机/跳跃游戏/跳跃游戏II

一、题目打卡 1.1 买卖股票的最佳时机 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(vector<int>& prices) {if(prices.size() 1) return 0;// int result 0;// int prediff 0;// int curdiff …

Java 数据结构篇-深入了解排序算法

概述 排序算法是计算机科学中的基本问题&#xff0c;也是数据结构学习的重要部分。在Java中&#xff0c;我们可以使用各种排序算法来排列数组或列表中的元素。以下是几个常见的排序算法及其基本思想的介绍&#xff1a; 排序算法介绍 1. 冒泡排序&#xff08;Bubble Sort&…

vue3 绑定form弹窗的方式

一、v-model"visibleProject"对应 :visible"model" const model defineModel({ type: Boolean }); 可以 在组件里对子组件visible 绑定的model单独监听 父组件<projectAllocation v-model"visibleProject"></projectAllocation>i…

点云从入门到精通技术详解100篇-基于3D点云的盘类元件识别与定位

目录 前言 2 3D视觉机器人抓取系统方案设计 2.1 系统硬件方案选型 2.1.1 相机选取方案

QT(6.5) cmake构建C++编程,多线程

QT(6.5) cmake构建C编程&#xff0c;多线程 1. 先写一个包含要被其他线程调用的函数且继承了QObject的类 #ifndef MY_FUNCTIONS_H #define MY_FUNCTIONS_H #include <QObject> #include <QQmlApplicationEngine>class My_Functions : public QObject {Q_OBJECT /…

git 代码冲突处理

在多人共同维护一个 git 项目的时候, 合并代码难免会遇到冲突的情况. 假设当前分支是 tmp 分支, 以 git merge dev 为例, 把 dev 的代码合并到 tmp 分支 处理冲突大致有3种情况: 使用 tmp 的代码使用 dev 的代码根据具体冲突的行进行处理 建议在遇到代码冲突的时候, 每个冲…