Sockets: Select() + FD_SET
-
Hi,
ich möchte gerne am Ende meines Programmes alle offenen Verbindungen terminieren, die in meinem FD_SET enthalten sind.......nur wie mach ich das?
Wie kann ich die Verbindungen in meinem FD_SET iterieren und dann sagen close()?
-
schau dir mal FD_ISSET(i, fd_set*) an, das fd_set ist nichts anderes als ein bitfield, also sollte i=0 der erste mögliche fd sein
lg lolo
-
noobLolo schrieb:
also sollte i=0 der erste mögliche fd sein
dabei sollte man nicht vergessen das die meißten os's dir fd 0,1 und 2 belegen, auch möglich das deine entwicklungsumgebung auch noch ein paar reserviert. Das hat mich mal ganz schön verwirrt, als mein socket fd 4 bekam...
lg lolo
-
Hm....sorry, ich versteh nicht ganz wie mir das helfen kann, die Verbindungen zu erkennen, die ich in meinem Programm erstellt hab
ich habs mal mit
for(int i=0; i < fdMax; i++) close(i);
probiert - und dann einfach alle verbindungen geschlossen, bis zur ich fdMax erreicht hab. Was aber nicht funktioniert hat, wie es zu erwarten war.
würde das denn gehen, wenn ich das so umändere?
for(int i=0; i < fdMax; i++) if (FD_ISSET(i, fd_set)) close(i);
-
ich hab kpl. was du machen willst. die beste erklärung die ich online finden konnte gibts von ibm hier http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/rzab6/rzab6xnonblock.htm, auch wenns ein paar "fehler" hat... z.b. hier
for (i=0; i <= max_sd && desc_ready > 0; ++i)
aber welcher code hat das nicht
-
ich hab kpl. was du machen willst.
Ich hab nen Server der mit select() und FD-Sets arbeitet. Wenn ich meinen server beende, will ich die Verbindungen die offen sind, sauber beenden. Also den aktiven Dateideskriptor mit close() schließen.
Das ist alles, oder muss man, wenn man mit FD-Sets arbeitet, die Verbindungen nicht schließen? Einfach die Verbindungen offen lassen und dann die Verbindungen killen, in dem das Programm terminiert, ist doch ein äußerst unsauberer Weg, oder nicht?
-
SoonBoon schrieb:
Einfach die Verbindungen offen lassen und dann die Verbindungen killen, in dem das Programm terminiert, ist doch ein äußerst unsauberer Weg, oder nicht?
ja sicher
-
Und wieso?