当前位置: 首页 > news >正文

C/C++ 设置Socket的IP_TOS选项

IP TOS选项是指示IP报文转发的优先级,QOS控制的一种,常规的IP协议TOS都为0,就是普通报文。

设置:

IPV4/TOS设置(Socket),IPTOS_LOWDELAY 表示FLASH优先级(一般用在游戏,即时通信这块,因为需要包转发要足够快)

        bool Socket::SetTypeOfService(int fd, int tos) noexcept {if (fd == -1) {return false;}if (tos < 0) {tos = IPTOS_LOWDELAY; }Byte b = tos; /* IPTOS_LOWDELAY */
#if defined(_MACOS)return ::setsockopt(fd, IPPROTO_IP, IP_TOS, (char*)&b, sizeof(b)) == 0;
#elsereturn ::setsockopt(fd, SOL_IP, IP_TOS, (char*)&b, sizeof(b)) == 0;
#endif}

设置

IPV4/IPV6 TOS设置(Socket)

        void Socket::AdjustDefaultSocketOptional(int sockfd, bool in4) noexcept {if (sockfd != -1) {uint8_t tos = IPTOS_LOWDELAY;if (in4) {if (SOCKET_RESTRICTIONS_.IP_TOS_ON) {
#if defined(_MACOS)::setsockopt(sockfd, IPPROTO_IP, IP_TOS, (char*)&tos, sizeof(tos));
#else::setsockopt(sockfd, SOL_IP, IP_TOS, (char*)&tos, sizeof(tos));
#endif}#if IP_DONTFRAGMENTint dont_frag = IP_PMTUDISC_DO;::setsockopt(sockfd, IPPROTO_IP, IP_DONTFRAGMENT, (char*)&dont_frag, sizeof(dont_frag));
#elif IP_PMTUDISC_WANTint dont_frag = IP_PMTUDISC_WANT;::setsockopt(sockfd, IPPROTO_IP, IP_MTU_DISCOVER, &dont_frag, sizeof(dont_frag));
#endif}else {// linux-user: Add missing IP_TOS, IPV6_TCLASS and IPV6_RECVTCLASS sockopts// QEMU:// https://patchwork.kernel.org/project/qemu-devel/patch/20170311195906.GA13187@ls3530.fritz.box/
#if IPV6_TCLASSif (SOCKET_RESTRICTIONS_.IPV6_TCLASS_ON) {::setsockopt(sockfd, IPPROTO_IPV6, IPV6_TCLASS, (char*)&tos, sizeof(tos)); /* SOL_IPV6 */}
#endif#if IPV6_MTU_DISCOVER && IPV6_PMTUDISC_WANTint dont_frag = IPV6_PMTUDISC_WANT;::setsockopt(sockfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &dont_frag, sizeof(dont_frag));
#endif}#if defined(SO_NOSIGPIPE)int no_sigpipe = 1;::setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &no_sigpipe, sizeof(no_sigpipe));
#endif}}

http://www.lryc.cn/news/324839.html

相关文章:

  • 【tensorflow_gpu】安装合集
  • Go 实现fsnotify
  • Flink GateWay、HiveServer2 和 hive on spark
  • 阿里云国际设置黑白名单(针对高防实例IP)
  • Docker 入门使用说明
  • UE5 LiveLink 自动连接数据源,以及打包后不能收到udp消息的解决办法
  • 国内ip切换是否合规?
  • Flutter 3.13 之后如何监听 App 生命周期事件
  • 基于docker创建深度学习开发环境
  • Linux系统——硬件命令
  • R语言Meta分析核心技术:回归诊断与模型验证
  • 动态规划Dynamic Programming
  • 详解机器学习概念、算法
  • 语音转文字——sherpa ncnn语音识别离线部署C++实现
  • 第1篇:Mysql数据库表结构导出字段到Excel(一个sheet中)
  • Request请求参数----中文乱码问题
  • labelImg安装方法
  • 吴恩达2022机器学习专项课程(一) 3.6 可视化样例
  • C#入门及进阶教程|Windows窗体属性及方法
  • 34-Java传输对象模式 ( Transfer Object Pattern )
  • flutter实现视频播放器,可根据指定视频地址播放、设置声音,进度条拖动,下载等
  • 微服务(基础篇-001-介绍、Eureka)
  • mac 解决随机出现的蓝色框
  • 深入理解与使用go之函数与方法--使用
  • 【QT问题】 Qt信号函数如果重名,调用怎么处理
  • 登山小分队(dfs,模拟)
  • Luminar Neo:重塑图像编辑新纪元,Mac与Win双平台畅享创意之旅
  • 计算机二级Python题库深度解析与备考策略
  • 微信商家转账到零钱:实用指南,涵盖开通、使用与常见问题
  • [精选]Kimi到底是什么,将带来什么?