epoll出現Bad file descriptor的原因
錯誤的順序:
close();
epoll_ctl(epollfd, EPOLL_CTL_DEL, sockfd, &ev);
正確的順序:
epoll_ctl(epollfd, EPOLL_CTL_DEL, sockfd, &ev);
close();
在刪除事件epoll_ctl(epollfd, EPOLL_CTL_DEL, sockfd, &ev);之前調用close()關閉socket描述符,就會導致刪除事件時epoll_ctl()返回值小於0,並且提示Bad file descriptor。在事件刪除後,再調用close()關閉對應的socket描述符就不會報錯了。