本文主要是介绍linux网络编程poll笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
poll函数执行的时候具体做了啥?
代码示例:
// .......
struct pollfd fds[1024] = {0};
fds[sockfd].fd = sockfd;
fds[sockfd].events = POLLIN;int maxfd = sockfd;
while(1) {int nready = poll(fds, maxfd+1, -1);// ......
}
//.......
1. poll中会将用户定义的pollfd结构体数组(fds)丢入系统内核,并将fds中每个pollfd结构体的文件描述符(fd)与当前进程丢入等待队列中。
2. 然后开始轮询fd中的每个文件描述符是否处于打开状态。如果是,就会检查该文件描述符对应触发的I/O事件是不是用户关心的事件(代码中的POLLIN事件)。如果是,就写入该pollfd中的revents中。
3. 增加可以被调用的文件描述符的数量(++nready)表示有一个文件描述符可以使用了,且用户关心的事件被触发了。
这篇关于linux网络编程poll笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!