void TCPNetwork::RunCheckSelectClient(fd_set& read_set, fd_set& write_set, fd_set& exc_set) { int size = m_clientSessionPool.size(); for (int i = 0; i < size; i++) { auto& cs = m_clientSessionPool[i]; if (cs.IsConnected() == false) { continue; } SOCKET sock = cs.SocketFD; int sIdx = cs.Index; if (FD_ISSET(sock, &exc_set) == true) { CloseSession(SOCKET_CLOSE_CASE::SELECT_ERROR, sock, sIdx); continue; } auto ret = RunProcessReceive(sIdx, sock, read_set); if (ret == false) { continue; } ret = RunProcessWrite(sIdx, sock, write_set); } //end for loop }
void TcpNetwork::RunCheckSelectClients(fd_set & exc_set, fd_set & read_set, fd_set & write_set) { for (int i = 0; i < m_ClientSessionPool.size(); i++) { auto& session = m_ClientSessionPool[i]; if (session.IsConnected() == false) continue; auto fd = session.SocketFD; auto sessionIndex = session.Index; //error check if (FD_ISSET(fd, &exc_set)) { CloseSession(ServerConfig::SOCKET_CLOSE_CASE::SELECT_ERROR, fd, sessionIndex); continue; } //read check auto retRecieve = RunProcessReceive(sessionIndex, fd, read_set); if (retRecieve == false) //새로 받은 데이터가 없다면 write 과정에 들어가지 않음. continue; //write check if (!FD_ISSET(fd, &write_set)) continue; RunProcessWrite(sessionIndex, fd, write_set); } }
void TcpNetwork::RunCheckSelectClients(fd_set& exc_set, fd_set& read_set, fd_set& write_set) { for (int i = 0; i < m_ClientSessionPool.size(); ++i) { auto& session = m_ClientSessionPool[i]; if (session.IsConnected() == false) { continue; } SOCKET fd = session.SocketFD; auto sessionIndex = session.Index; // check error if (FD_ISSET(fd, &exc_set)) { CloseSession(SOCKET_CLOSE_CASE::SELECT_ERROR, fd, sessionIndex); continue; } // check read auto retReceive = RunProcessReceive(sessionIndex, fd, read_set); if (retReceive == false) { continue; } // check write RunProcessWrite(sessionIndex, fd, write_set); } }