18,356
社区成员
发帖
与我相关
我的任务
分享
unsigned __stdcall PoCManager::accept_forever_thread(void* context){
Manager* manager = (Manager*)context;
/// select模型
fd_set select_socket_fd_set;
int time_out = 3;
struct timeval tv = { 1L, 0L };
while (manager && manager->m_origin_socket_fd_set.fd_count > 0){
select_socket_fd_set = manager->m_origin_socket_fd_set;
int select_ret = select(0, &select_socket_fd_set, NULL, NULL, &tv);//select
//.....省略
}
}
if (m_origin_socket_fd_set.fd_count <= 0){
FD_ZERO(&m_origin_socket_fd_set);
}
FD_SET(tcp_socket, &m_origin_socket_fd_set);
if (m_origin_socket_fd_set.fd_count <= 1 && !m_handle_thread[0]){
/*启动recv线程*/
m_handle_thread[0] = (HANDLE)_beginthreadex(NULL, 0, accept_forever_thread, this, 0, NULL);
}
while (manager && manager->m_origin_socket_fd_set.fd_count > 0){
select_socket_fd_set = manager->m_origin_socket_fd_set;
int select_ret = select(0, &select_socket_fd_set, NULL, NULL, &tv);//select
//.....省略
}
问题找到了,
m_origin_socket_fd_set 更新后,
select_socket_fd_set 还是监听原来的旧数据。
那么,要如何主动通知select,让其不要阻塞了呢?