Zastanawiam się, czy istnieje łatwy sposób iteracji przez fd_set? Powodem, dla którego chcę to zrobić, jest brak konieczności przechodzenia przez wszystkie podłączone gniazda, ponieważ select() zmienia te ustawienia fd_, tak aby zawierały tylko te, które mnie interesują. Wiem też, że używanie implementacji typu, który nie jest przeznaczony do bezpośredniego dostępu, jest generalnie złym pomysłem, ponieważ może się różnić w różnych systemach. Jednak potrzebuję jakiegoś sposobu, aby to zrobić i brakuje mi pomysłów. Moje pytanie brzmi:Jak iterować przez fd_set
Jak wykonać iterację za pomocą fd_set? Jeśli jest to naprawdę zła praktyka, czy istnieją inne sposoby rozwiązania mojego "problemu", z wyjątkiem przeplatania wszystkich podłączonych gniazd?
Dzięki
Aby podkreślić, co mam na myśli. Nie chcę używać podejścia FD_ISSET, ponieważ wymaga on, aby przechodzić przez wszystkie podłączone gniazda. Ale ponieważ, z definicji, select() usuwa nieistotne deskryptory plików z zestawu, chcę przechodzić przez zestaw. – Andreas
To nie musi oznaczać "wszystkie połączone". Możesz przekazać podzbiór podłączonych gniazd, aby wybrać, a następnie użyć FD_ISSET tylko na tym podzbiorze po wybraniu opcji return. Czy istnieje również problem z zapętlaniem się nad nimi wszystkimi? Jeśli nie masz do czynienia z wieloma tysiącami podłączonych gniazd, pętla prawdopodobnie zajmie nieistotny czas. – Rakis
Zgadzam się z Rakis. Jest to jedna z tych rzeczy, która wydaje się być nieskuteczna, ale w większości przypadków tak naprawdę nie jest. Czas przejścia przez pętlę będzie mniejszy niż czas potrzebny do obsługi tylko jednego zestawu FD. – Duck