Если это на самом деле лучше, чем зацикливание, необходимо доказать известные fds.

то в моей текущей реализации сервера, это в настоящее время что-то вроде этого:

  void loop(){
     // step 1: clear set

     fd_set readfds;

     while(true){

        // step 1:
        FD_ZERO(readfds);

        // step 2:
        loop_through_sockets_and_add_active_sockets_to(theset);

        // step 3:
        switch(select(FD_SETSIZE, &readfds, 0, 0, &tv)) {
           case SOCKET_ERROR:
              patia->receiveEvent(Error, net::getError());
              return;
           case 0:
              return;
        }

        // step 4:
        loop through sockets and check, using FD_ISSET, 
        which read fd's have incoming data.

     }
  }

Теперь, не очищая fd_set (используя FD_SET, FD_CLR, когда каналы добавляются / удаляются только), был бы лучший способ сделать что-то.

У меня вопрос, как вы можете пройти через fd_set после select (), не проверяя каждый элемент набора, если он является частью набора, без использования FD_ISSET?

Я имею в виду, что когда у вас 4000 активных соединений, при поступлении данных вышеупомянутый цикл должен пройти через потенциальные 4000 сокетов, прежде чем перейти к нужному. Сложность будет n ^ 2, если все потоки активны много!

Ответы на вопрос(3)

Ваш ответ на вопрос