[C] Sockets, select und Threads

OP #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 #2394612
Lesenswert?
• ▲
▼
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.
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.
OP #2394651
Lesenswert?
• ▲
▼
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!

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