man epoll
Q6 Will closing a file descriptor cause it to be removed from all epoll sets automatically?
A6 Yes, but be aware of the following point. A file descriptor is a reference to an open file description (see open(2)). Whenever a descriptor is
duplicated via dup(2), dup2(2), fcntl(2) F_DUPFD, or fork(2), a new file descriptor referring to the same open file description is created. An
open file description continues to exist until all file descriptors referring to it have been closed. A file descriptor is removed from an epoll
set only after all the file descriptors referring to the underlying open file description have been closed (or before if the descriptor is explic-
itly removed using epoll_ctl(2) EPOLL_CTL_DEL). This means that even after a file descriptor that is part of an epoll set has been closed, events
may be reported for that file descriptor if other file descriptors referring to the same underlying file description remain open.
只要这个socket没有被dup fcntl fork等函数拷贝,就会自动删除。言外之意就是,当close是真的释放了文件描述符资源,而不是减少文件描述的引用计数的话,就会自动从epoll set 中删除