我有一个当前订阅的非阻塞套接字:
ev.events = EPOLLIN | EPOLLPRI | EPOLLERR | EPOLLHUP | EPOLLRDHUP| EPOLLET;
它接收几个 EPOLLIN,我非阻塞地读取它们直到 EAGAIN,然后我收到 HUP 和 RDHUP,有时还要读取几个字节。
另一面只是:
send(socket,960_bytes_buffer)
close(socket);
我已经在 epollin 和关闭时间的事件循环中直接尝试使用 msg_peek 进行 recv,并添加接收到的数据它并不总是收到 960,有时只有大约 480 个字节。
使套接字非阻塞或在发送和关闭之间的客户端中放置一个 sleep(1) 可以正常工作。
在我看来,与 epoll 相关的非阻塞套接字问题更多。像“nc -l -p port”这样简单的东西接收适当数量的字节。