2
上的epoll,該epoll_data結構是很重要的epoll_data結構中存在缺陷,是否有必要改進?
typedef union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;
如果一些事件,我需要把它與一些額外的信息,爲epoll_data,我需要建立一個結構,並使用ptr
爲指向結構體。而且裏面的結構,我把一個fd
元素,像
typedef {
int fd;
char* info;
} compound;
但是當我要檢查活動的事件,我必須做一些事情,如:
for(; ;)
{
nfds = epoll_wait(epfd,events,20,500);
for(i=0;i<nfds;++i)
{
if(events[i].data.fd==listenfd) {
...
}
else if(((compound*)events[i].events.ptr)->fd ....){
...
}
}
檢查不一致,有時我需要檢查events[i].data.fd
,有時我需要檢查events[i].data.ptr->fd
。如果我把所有事件保持一致,即讓所有事件都有一個void ptr,對於某些套接字來說,這是一種浪費,因爲它們與附加信息無關。
所以我認爲epoll_data應該有一個獨立的int fd
元素,因爲fd
通常非常重要。
您對此有何看法?謝謝!
*爲什麼*檢查不一致?當你已經有'events [i] .data.fd'時,我不明白你爲什麼需要使用'events [i] .data.ptr-> fd' – EJP