Здравствуйте!
У меня после того как метод epoll_wait получает событие EPOLLIN, поле структуры epoll_event.data.fd выставлено в 0, хотя в документации сказано, что там должен быть дескриптор
клиентского сокета (кстати поле epoll_event.data.ptr при этом заполнено корректно).
int n = epoll_wait(epoll_fd, events, maxEvents, -1);
for (int i = 0; i < n; i++)
{
epoll_event e = events[i];
int s = e.data.fd; <---- всегда 0
}
Код для входящего сокета:
int cfd = accept4(sfd, null, null, SOCK_NONBLOCK);
epoll_event e;
e.events = EPOLLIN;
e.data.fd = cfd;
e.data.ptr = (void*)cfd;
epoll_ctl(efd, EPOLL_CTL_ADD, cfd, &e);
Аналогичная ситуация при подключении нового клиента, в документации сказано, что там должен быть дескриптор
серверного сокета, но там 0.
Код для серверного сокета:
epoll_event se;
se.data.fd = sfd;
se.events = EPOLLIN;
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sfd, &se);