Hallo, derzeit schreibe ich an einer kleinen Netzwerk-Applikation und stehe vor einem Problem, das ich bisher nicht lösen konnte: Ich nutze select((h_socket+1), ...), um auf Nachrichten eines Clients zu reagieren. Nachdem select() eine eintreffende Nachricht erkannt hat, wird diese mit read() eingelesen. Bei der weiteren Verarbeitung greift das Programm auf FIFOs zu. Geschieht dies, funktioniert das select() anschließend nicht mehr. Durch den Zugriff auf die FIFOs ändert sich die Anzahl der geöffneten Dateideskriptoren (fd) und damit hat select() natürlich ein Problem, denn als ersten Parameter erwartet es "fd_max"+1. Hat jemand eine Idee, wie ich in einem Programm mit mehreren Threads und unterschiedlich vielen fds den "fd_max" für das select() herausbekommen kann? Oder bin ich vielleicht auf dem Holzweg? Der fd h_socket ist im Programmverlauf immer gleich (Verbindung wird nicht getrennt), aber zwischendurch geschehen beliebig viele Zugriffe mit weiteren fds. Besten Dank! :-)
J. Krämer schrieb: > Hat jemand eine Idee, wie ich in einem Programm mit mehreren Threads und > unterschiedlich vielen fds den "fd_max" für das select() herausbekommen > kann? Oder bin ich vielleicht auf dem Holzweg? ich würe statt select poll verwenden, dann gibt es diesen Problem nicht mehr.
J. Krämer schrieb: > Durch den Zugriff auf die FIFOs ändert sich die Anzahl der geöffneten > Dateideskriptoren (fd) und damit hat select() natürlich ein Problem, > denn als ersten Parameter erwartet es "fd_max"+1. Warum ist das ein Problem? > Hat jemand eine Idee, wie ich in einem Programm mit mehreren Threads und > unterschiedlich vielen fds den "fd_max" für das select() herausbekommen > kann? Du erstellst doch sowieo direkt vor dem Aufruf dein fd_set, also kennst du da doch die Deskriptoren.
Okay, das war auch gar nicht das Problem. Irgendwie war mir klar, dass ich den Fehler finde, sobald ich hier nachfrage... Durch Fehlersuche und Testen hatte ich das fd_set irgendwann an einer falschen Stelle deklariert. Das Problem hat sich damit erledigt. Besten Dank für die Tipps!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.