首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >epoll如何返回正确的文件描述符

epoll如何返回正确的文件描述符
EN

Stack Overflow用户
提问于 2021-08-04 17:10:57
回答 1查看 375关注 0票数 0

我有两个UDP连接,我试图将它们添加到使用epoll()。我正在看这个例子:

https://programmer.ink/think/epoll-for-linux-programming.html

我已经粘贴了下面的代码。

在开始时,他们创建一个epoll事件以及一个epoll事件数组:

struct epoll_event ev,events[20];

我不知道为什么两者都需要。

然后他们给epoll_wait()打电话

nfds=epoll_wait(epfd,events,20,500);

并检索套接字:

if(events[i].data.fd==listenfd)

但是,这三行之间没有填充events

  1. 那么events[i].data.fd如何包含套接字文件描述符?

如果我们有一个具有文件描述符数据成员的epoll_event数组,为什么我们要设置

  • 呢?

结构epoll_event ev,events20;//生成特定于epoll的文件描述符,用于处理accept s epfd=epoll_create(256);struct sockaddr_in clientaddr;struct sockaddr_in serveraddr;listenfd = socket(AF_INET,SOCK_STREAM,0);//Set套接字到非阻塞//Set阻塞(Listenfd);//设置与要处理的事件相关的文件描述符(ev.data.fd=listenfd);//将事件类型设置为处理ev.events=EPOLLIN|EPOLLET;//ev.events=EPOLLIN;//Register epoll_ctl(epfd,EPOLL_CTL_ADD,listenfd,&ev);bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;char *local_addr="127.0.0.1";inet_aton(local_addr,&(serveraddr.sin_addr));//hton(Portnumber);serveraddr.sin_port=htons(portnumber);bind(listenfd,( sockaddr *)&serveraddr,相当大的(Serveraddr));侦听(listenfd,LISTENQ);maxi = 0;for (;){//等待epoll事件发生nfds=epoll_wait(epfd,events,20,500);//处理(i=0;i

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 17:45:58

  1. 那么events[i].data.fd如何包含套接字文件描述符?

它是由epoll_wait()放进去的。它在events数组中填充有关发生的所有事件的信息。

如果我们有一个具有文件描述符数据成员的epoll_event数组,为什么我们要设置ev.data.fd=listenfd;

ev用于向epoll_ctl()注册等待事件,events数组包含发生的事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68655433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档