问答:如何使用epoll

您所在的位置:网站首页 epoll_create1 问答:如何使用epoll

问答:如何使用epoll

#问答:如何使用epoll| 来源: 网络整理| 查看: 265

我越来越难以在epoll_event中使用void*ptr.我可以将它链接到一个结构?例如,我可以这样做吗?因为我正在尝试这样的东西,但它不起作用,监听套接字上的第一个循环是好的,但在另一个事件进入后崩溃.有人可以帮助我理解如何使用data.ptr吗?

struct client { int fd; int connection_status; }; struct epoll_event *events = NULL; struct epoll_event ev; struct client *c = new client; struct client *event_c = NULL; c.fd = (socket); int efd = epoll_create1(0); ev.data.fd = c.fd; ev.events = EPOLLIN; ev.data.ptr = c; epoll_ctl ( efd , EPOLL_CTL_ADD , c.fd , &ev ); events = (struct epoll_event*)calloc ( XXX , sizeof event ); while(1) { int n = epoll_wait ( efd , events , XXX , -1 ); for ( int i = 0 ; i fd fd == events[i].data.fd ) { struct client *new_c = new client; struct epoll_event new_ev; struct sockaddr inaddr; sockletn_t in_len; int nfd = accept ( c->fd , &inaddr , &in_len ); /* make socket non-blocking ... / error checking */ new_c->fd = nfd; new_c->connection_status = 1; new_ev.data.fd = nfd; new_ev.events = EPOLLIN; new_ev.data.ptr = client; int r = epoll_ctl ( efd , EPOLL_CTL_ADD , nfd , &new_ev ); continue; } else { ssize_t count; char buf[512]; int count = read ( events[i].data.fd , buf , sizeof buf ); // ... error checking blah blah blah int rc = write ( 1 , buf , count ); } } }

小智.. 11

的void *ptr和int fd都是里面的一个工会内struct epoll_event.你应该使用其中任何一个而不是两个.因此,在您的结构中,添加字段fd以及仅链接指向ptr字段中的结构的指针epoll_event.这样当你拿回指针然后从中获取fd它以供进一步使用.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3