2012-04-03 5 views
0

Ich habe eine TCP-Server-Anwendung, in der ich beim Empfang einer eingehenden Verbindung, akzeptiere ich die Verbindung und den Socket-Deskriptor zu einer Liste hinzufügen. Der Server benötigt die Liste, damit er die Liste durchlaufen und regelmäßig Daten an alle verbundenen Clients senden kann.hinzufügen/entfernen Socket-Deskriptoren von Poll()

Wenn einer der Clients die Verbindung beendet, muss der entsprechende Socket-Deskriptor aus der Liste gelöscht werden.

Ich habe versucht, die Deskriptoren zu Poll() hinzuzufügen, so dass ich jede geschlossene Verbindung mit möglicherweise POLLHUP erkennen kann, aber ich kann nicht herausfinden, wie Abfrage zu dynamisch hinzufügen Deskriptoren zu seinem Satz auf jeder eingehenden neuen Verbindung zu unterbrechen.

Der Server benötigt nur die Liste der Deskriptoren aller offenen Verbindungen, wann immer er Daten senden will.

Wie gehe ich vor? Irgendwelche Vorschläge?

EDIT: Hier ist, was ich getan habe: Ich habe einen Thread für jeden Client erstellt und seine fd zur Umfrage hinzugefügt. Pseudo-Code auf dem Server:

sockfd = accept the conn. 
pthread_create 

// Inside the thread, add sockfd to poll 
struct pollfd fds[1]; 
fds[0].fd = sockfd; 
poll(fds, 1, 500000); 
Check for POLLHUP returned event and see which client(fd) closed the connection. 

Dies scheint alle Deskriptoren abzufragen, aber mein Problem ist jetzt, dass, wenn ich mit zwei Schließen der Verbindungen getestet clients..only einer der Deskriptoren gibt POLLHUP.

+0

Nach dem Testen mit mehreren Clients habe ich beobachtet, dass POLLHUP durch das Schließen eines der Sockets ausgelöst wird, mit Ausnahme des ersten Clients, der mit dem Server verbunden ist. – ddd

Antwort

3

Ich kann nicht herausfinden, wie Umfrage zu unterbrechen dynamisch auf jede eingehende neue Verbindung Deskriptoren seinen Satz

Sie sollten die Abhörsocket für die Aktivität überwachen hinzuzufügen. Einmal poll Entsperrt das erste, was Sie überprüfen, ist "hat meine Hör-Buchse interessant geworden?". Wenn ja, akzeptiere und füge zu poll und deiner eigenen Liste hinzu.

Verwandte Themen