У меня есть неблокирующий сокет, на который в данный момент подписан:
ev.events = EPOLLIN | EPOLLPRI | EPOLLERR | EPOLLHUP | EPOLLRDHUP| EPOLLET;
Он получает пару EPOLLIN, которые я читаю неблокирующими до EAGAIN, а затем я получаю HUP & RDHUP, иногда с несколькими байтами для чтения.
Другая сторона просто:
send(socket,960_bytes_buffer)
close(socket);
Я пытался использовать recv с msg_peek непосредственно в цикле событий как для эполлина, так и для близкого времени, и при добавлении полученных данных он не всегда получает 960, иногда только около 480 байт.
Работает нормально, не блокируя сокет или помещая в клиент режим сна (1) между отправкой и закрытием.
Для меня это больше проблема неблокирующих сокетов, чем связанных с epoll. Что-то простое, например, «nc -l -p port», получает правильное количество байтов.