我有两个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。
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
}
发布于 2021-08-04 17:45:58
events[i].data.fd如何包含套接字文件描述符?它是由epoll_wait()放进去的。它在events数组中填充有关发生的所有事件的信息。
如果我们有一个具有文件描述符数据成员的epoll_event数组,为什么我们要设置ev.data.fd=listenfd;?
ev用于向epoll_ctl()注册等待事件,events数组包含发生的事件。
https://stackoverflow.com/questions/68655433
复制相似问题