C++网络编程之poll

       poll机制与select机制类似,通过管理文件描述符来进行轮询,效率更高,并且处理的连接个数不受内核的限制。

1、poll函数

# include <poll.h>
int poll ( struct pollfd * fdarray, unsigned int nfds, int timeout);

参数:

(1)fdarray:可读套接字,是一个指向数组的指针,这个数组是由 struct pollfd 作为元素构成的,pollfd结构体:

struct pollfd {
    int fd;         		// 用于检测的文件描述符
    short events;         // 等待的事件类型
    short revents;        // 实际发生的事件类型
} ; 

(2)nfds:所监控的最大文件描述符的个数,使用的时候传入当前最大的文件描述符号+1 即可 。

(3)timeout:工作模式:

阻塞模式

        将 timeout = INFTIM传入即可,当代码执行poll 函数的所在行的时候,若是fdarray 数组中的所有套接字描述符上面都没有发生变化,则代码不会向下执行,而是卡在 poll 所在行,直到 fdarray 中的套接字描述符有发生变化poll 方法才会返回发生变化的全部套接字的个数,并继续向下执行;若出错则返回-1 。

非阻塞模式

       将 timeout = 0传入即可,当代码执行到 poll 函数所在行的时候,若是 fdarray 数组中的所有套接字均没有变化,则不作停留,立即返回0; 若是 fdarray数组中存在套接字发生变化的,则立即返回发生变化的套接字的总数;若是 poll内部出错,立即返回 -1 。

固定时间内阻塞模式

       将 timeout 设置为非零的整数,当代名执行到 poll 函数所在行的时候,会等待 timeout 秒,在时间到达的时候,返回在这一段时间内发生变化的套接字总个数(没有就返回 0);若是在 timeout(sec) 这段时间内有错误发生的话,立即返回 -1

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到C++网络编程面试题时,以下是一些常见的问题和答案: 1. 什么是套接字(Socket)? 套接字是一种用于网络通信的编程接口,它提供了一种机制,使得不同计算机上的进程可以通过网络进行通信。 2. TCP和UDP有什么区别? TCP(传输控制协议)是一种可靠的、面向连接的协议,它提供了数据传输的保证和错误检测机制。UDP(用户数据报协议)是一种不可靠的、无连接的协议,它提供了一种简单的数据传输机制。 3. 什么是阻塞和非阻塞IO? 阻塞IO是指当一个IO操作发生时,程序会一直等待直到操作完成。非阻塞IO是指当一个IO操作发生时,程序会立即返回并继续执行其他任务,而不会等待操作完成。 4. 什么是同步和异步IO? 同步IO是指当一个IO操作发生时,程序会一直等待直到操作完成,并且在操作完成后立即处理结果。异步IO是指当一个IO操作发生时,程序会立即返回并继续执行其他任务,而在操作完成后再处理结果。 5. 什么是select函数? select函数是一种多路复用IO模型,它可以同时监视多个文件描述符的可读、可写和异常事件,并在有事件发生时通知程序进行处理。 6. 什么是IO多路复用? IO多路复用是一种同时监视多个IO事件的机制,它可以通过一种或多种方式(如select、poll、epoll等)来实现。 7. 什么是TCP粘包问题? TCP粘包问题是指在TCP传输过程中,由于数据的发送和接收速度不一致,导致接收方无法正确解析出发送方发送的数据包。 8. 如何解决TCP粘包问题? 解决TCP粘包问题的方法有多种,常见的方法包括使用固定长度的消息、使用特殊字符作为消息的分隔符、在消息头部添加消息长度等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值