Open wodaizhequ8 opened 8 months ago
http_conn::close_conn成员调用后会关闭客户端socket
//从内核时间表删除描述符 void removefd(int epollfd, int fd) { epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, 0); close(fd); } //关闭连接,关闭一个连接,客户总量减一 void http_conn::close_conn(bool real_close) { if (real_close && (m_sockfd != -1)) { printf("close %d\n", m_sockfd); removefd(m_epollfd, m_sockfd); m_sockfd = -1; m_user_count--; } }
调用http_conn::close_conn成员在这里
void http_conn::process() { HTTP_CODE read_ret = process_read(); if (read_ret == NO_REQUEST) { modfd(m_epollfd, m_sockfd, EPOLLIN, m_TRIGMode); return; } bool write_ret = process_write(read_ret); if (!write_ret) { close_conn(); } modfd(m_epollfd, m_sockfd, EPOLLOUT, m_TRIGMode); }
但是并没有去清理WebServer类中的用户的定时器,当定时器超时时,还会再次关闭相同的socket,就导致多次关闭同一个文件描述符
void cb_func(client_data *user_data) { epoll_ctl(Utils::u_epollfd, EPOLL_CTL_DEL, user_data->sockfd, 0); assert(user_data); close(user_data->sockfd); http_conn::m_user_count--; }
还是说有什么处理我没看到?求教!
http_conn::close_conn成员调用后会关闭客户端socket
调用http_conn::close_conn成员在这里
但是并没有去清理WebServer类中的用户的定时器,当定时器超时时,还会再次关闭相同的socket,就导致多次关闭同一个文件描述符
还是说有什么处理我没看到?求教!