我有一些代码在虚拟机上运行时由于某种原因行为不端。
初始化顺序为:
s_listen = socket(...)
bind(s_listen, ...)
epoll_ctl(epfd, EPOLL_CTL_ADD, s_listen, ...)
listen(s_listen, SOMAXCONN)
在调用 bind 之前,有一个事件循环/线程在 epoll 文件描述符上运行和处理事件。
该事件循环在调用新创建的 s_listen 套接字上的 listen() 之前获得一个 EPOLLHUP。
所以我的问题是,为什么我要在一个全新的套接字上获得 EPOLLHUP 事件?
当我在调用listen()之后放置epoll_ctl时错误消失了,但是如果它们在套接字添加到epoll之前进入,会导致错过一些潜在的连接事件吗?