на 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
. Если я поставил все события совместимыми, а именно, пусть у всех из них есть пустота ptr, для некоторых сокетов это отходы, потому что они не связаны с дополнительной информацией.
поэтому я думаю, что epoll_data должен иметь независимый элемент int fd
, потому что fd
обычно очень важен.
Каково ваше мнение об этом? благодаря!
* Почему * Неверная проверка? Я не понимаю, почему вам когда-либо нужно использовать 'events [i] .data.ptr-> fd', когда у вас уже есть' events [i] .data.fd' – EJP