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

复习linux网络编程

IO Multiple

  • IO多路复用
    • select
      • **函数原型**
      • **参数说明**
      • **返回值**
      • 优缺点
    • poll
      • **函数原型**
      • **参数说明**
      • **返回值**
      • 优缺点
    • epoll
      • 3.1 **epoll 的基本概念**
      • **主要 API 函数**
      • **3.2 函数原型**
      • **3.3 参数说明**
      • 3.4 优缺点
    • 总结:

IO多路复用

系统调用函数,select, poll, epoll

select

select 函数是一个用于监视多个文件描述符的系统调用,常用于网络编程中以实现 I/O 多路复用。它允许程序在多个套接字上等待数据可读、可写或发生异常,而不需要为每个套接字单独使用阻塞调用。

select使用的原理 数据结构-位图

将要监视的事件的文件描述符

函数原型

#include <sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
void FD_ZERO(fd_set *set);//将set清空为0
void FD_SET(int fd, fd_set* set);//将fd设置到set集合中
void FD_CLR(int fd, fd_set* set);//将fd从set中清除出去  
void FD_ISSET(int fd, fd_set* set);//判断fd是否在集合中

参数说明

  • nfds: 监视的最大文件描述符加 1。通常是所有文件描述符中的最大值加 1。
  • readfds: 指向 fd_set 结构的指针,表示哪些文件描述符需要检查是否可读。
  • writefds: 指向 fd_set 结构的指针,表示哪些文件描述符需要检查是否可写。
  • exceptfds: 指向 fd_set 结构的指针,表示哪些文件描述符需要检查是否发生异常。
  • timeout: 指向 timeval 结构的指针,表示等待的最大时间。如果设置为 NULL,则会无限期等待;如果设置为零,则立即返回。

返回值

  • 成功时返回活动文件描述符的数量;出错时返回 -1,并设置 errno;如果超时返回 0。
	fd_set readfds;struct timeval timeout;
while (true) {// 清空文件描述符集合FD_ZERO(&readfds);FD_SET(listen_sock, &readfds);// 设置超时时间timeout.tv_sec = 5;  // 5 秒超时timeout.tv_usec = 0;// 调用 selectint activity = select(listen_sock + 1, &readfds, nullptr, nullptr, &timeout);if (activity < 0) {perror("select error");break;} else if (activity == 0) {std::cout << "Timeout occurred, no incoming connections." << std::endl;continue;}// 检查是否有新的连接,判断监听fd是否在readfd中if (FD_ISSET(listen_sock, &readfds)) {new_sock = accept(listen_sock, (struct 

http://www.mrgr.cn/news/37770.html

相关文章:

  • qt xml解析与处理
  • 使用asio 接收ps流代码并显示
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • 高考技术——pandas使用
  • 指令个人记录
  • 废品回收小程序:回收更加便捷!
  • 构建5G-TSN测试平台:架构与挑战
  • 变种水仙花数 - Lily Number
  • windows@win10@Win11版本号和代号命名变迁@获取或查看windows版本号信息详情方法列举
  • C++11中智能指针以及标准模板库 My_string My_stack
  • 钉钉H5微应用Springboot+Vue开发分享
  • re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)
  • Linux下的驱动开发二
  • 修改DNS地址有什么影响
  • Excel根据一个值匹配一行数据
  • HTX DAO重磅亮相Crypto Summit 2024:强势布局CIS地区,推动全球化扩张
  • 基于大数据的亚健康人群数据分析及可视化系统
  • 玩美移动发布最新全球趋势报告,以探讨影响美妆与时尚的主要AI趋势
  • AI 智能名片 S2B2C 商城小程序源码:以客户五感体验建立信任的新路径
  • pysim-4-1.1.17 eUICC ISD-R commands