[C] Sockets, select und Threads

#2394606
Lesenswert?

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! :-)
Gast #2394640
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren