recv: Was ist, wenn die Gegenseite nicht mehr da ist?
-
boah ich werd immer unsicherer, soll ich nun select() nehmen, womit ich mich zumindest ein wenig auskenne, oder dieses poll, wovon ich überhaupt keine ahnung hab oder was denn nun?
-
Thread pro Client: Nein.
select: Nein.
poll: Nein.
-
??? was denn sonst?
-
epoll: Ja.
-
gibt es dazu irgend ein beispiel/tutorial?
-
Ich brauch echt eure Hilfe, weil die Zeit drängt... Soll in nun dieses ePoll nehmen? Wenn ja, wie funktioniert es überhaupt? Ich hab gar keinen Schimmer davon...
-
Die Manpage reicht aus.
-
okay danke, ich muss mir das mal genauer anschauen...
-
Da hätt ich noch ne frage: Bei epoll_wait oder select oder sonst was kann man ja ein timeout angeben, nur auf was bezieht sich das? Angenommen man hat ein timeout von 60 sekunden und 100 clients angenommen, wird dann
- das programm fortgesetzt, wenn innerhalb der 60 sekunden überhaupt keine daten eingetroffen sind oder
- ein socket für "tot" erklärt, der innerhalb der letzten 60 sekunden kein lebenszeichen erbracht hat
?ersteres wäre nämlich nutzlos für mein programm, weil später bei über 1.000 clienten immer irgendwelche daten eintreffen und ich ja nur die toten clienten rausfischen will.
MfG, Herr-Vorragend
-
Herr-Vorragend schrieb:
ersteres wäre nämlich nutzlos für mein programm, weil später bei über 1.000 clienten immer irgendwelche daten eintreffen und ich ja nur die toten clienten rausfischen will.
das klingt mir nach nem timout-setzen mit setsockopt.
-
stimmt daran hab ich gar nicht gedacht. Also brauch ich den timeout-parameter von epoll/select gar nicht. danke
-
doch den brauchst du, weil du sonst cpu zeit verschwendest.
-
Hm, versteh ich jetzt nicht, und wie behandle ich das ganze dann? Dann wird das Programm fortgesetzt obwohl gar keine Daten vorhanden sind oder wie?
-
mitm timeout blockt dein programm wenigstens nicht und es frisst keine cputime, wenns nicht sein muss.
select() returnt 0, wenns nix zu tun gibt. andere funktionen machen was aehnliches.
-
also ein timeout für recv/send wirst du ja wohl nicht brauchen da du ja deine sockets eh im non-blocking modus hast.
-
nonblocking recv/send? wozu? (rhetorische fragen)
-
(rhetorische fragen)
-
Hm, ich verstehs nicht, es ist doch sogar besser wenn das Programm bei select() still steht, als wenn es 1000 mal pro sekunde aufgerufen wird, oder? Und die sockets lass ich denk ich im blocking modus...
-
genau das wuerde ich auch machen. deswegen hat select() erst ein timeout.
-
ich dachte select friert solange das programm ein bis ein event auftritt, ist es nicht so? Zumindest kann man das bei der funktion epoll_wait vermuten...