Netzwerk Prog. Problem mit Select()

Hillkorn

Mitglied
Soweit ich weiß löscht man mit select(0,&fdset,NULL,NULL,NULL);
Einfach alle sockets aus dem fdset raus die nicht mehr connected sind und tut dies ohne das Programm zum stehen zu bringen!

Hab select bei google eingeben aber leider NICHTS gefunden außer 3 SQL sachen :/

Falls ich mit dem Text da oben richtig liege dann stimmt bei mir leider was nicht da es nähmlich stehen bleibt und nur mein 2ter thread noch weiterläuft.
2 clients sind connected und wenn ich mit einem was abschicke dann läuft es weiter und es ist nur noch der eine vorhanden der etwas geschickt hat.
 
Hillkorn hat gesagt.:
Soweit ich weiß löscht man mit select(0,&fdset,NULL,NULL,NULL);
Einfach alle sockets aus dem fdset raus die nicht mehr connected sind und tut dies ohne das Programm zum stehen zu bringen!

Da hast du wohl was falsch verstanden:

man page select hat gesagt.:
DESCRIPTION
select() and pselect() allow a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready"
for some class of I/O operation (e.g., input possible). A file descriptor is considered ready if it is possible to perform the corresponding
I/O operation (e.g., read(2)) without blocking.

Siehe http://linux.die.net/man/2/select

Gruß,
RedWing
 
OK danke schonmal :)

hm also müsst ich mir selbst so etwas schreiben? zb in dem ich ein thread erstelle der jeweils ein socket anpingt sozusagen und ich im hauptprogramm auf die antwort warte ... falls diese nicht kommt wird der thread beendet und der socket geschlossen.
Könnte doch so funktionieren oder?
 
OK danke schonmal :)

hm also müsst ich mir selbst so etwas schreiben? zb in dem ich ein thread erstelle der jeweils ein socket anpingt sozusagen und ich im hauptprogramm auf die antwort warte ... falls diese nicht kommt wird der thread beendet und der socket geschlossen.
Könnte doch so funktionieren oder?
Ja du müsstest halt in deinem Thread ein write an den client schicken, und falls dieser seinerseits innerhalb einer bestimmten Zeit nicht antwortet ist er tot und du kannst deinen servereigenen client socket schließen und den Deskriptor evtl. invalidieren.

Btw. in diesem Thread ging es mal um was ähnliches aber glaube ein anderer Ansatz, vlt. hilft es dir ja:
http://www.tutorials.de/forum/c-c/297423-server-verwaltet-clients-per-threads.html

Gruß,
RedWing
 
Zurück