recv: Was ist, wenn die Gegenseite nicht mehr da ist?
-
hm, komisch die MSDN sagt:
BSD options not supported for setsockopt are shown in the following table.
...
SO_RCVTIMEO int Receives time-out in milliseconds (available in the Microsoft implementation of Windows Sockets 2).
-
also brauchste winsock2 und nicht 1.1
-
achso, okay, dann hab ich das falsch verstanden. Allerdings hilft mir das ja dann auch nicht weiter, wenn ich eh select() nehme. Also nochmal die Frage:
Kann ich den Wert von FD_SETSIZE nun einfach auf z.B. 4.096 erhöhen?
-
Selbst wenn das gehen würde das wäre doch total ineffizient. Jedes mal wenn select fertig ist müsstest du im worst case alle 4096 Sockets durchlaufen.
-
probiers doch einfach aus mit und ohne #define. wenn das prog nur bei der nicht-define variante abkackt, dann is alles ok.
-
das mit dem worst case war falsch. man muss immer alle sockets durchlaufen.
-
@meinung: Fakt ist, dass das Programm später mal mit bestimmt 10.000 Usern zurecht kommen muss. Nun kann ich, wie ich vorhin schon gesagt habe, das Programm mehrfach über mehrere Ports laufen lassen, sodass jedes Programm z.B. nur 2.048 User verwalten muss. Angeblich ist select() dafür besser geeignet als verschiedene Threads, also probier ich das einfach mal aus.
@rackwitz: ja okay, muss ich dann wohl irgendwann mal ausprobieren. danke für die hilfe.
-
select ist mit Sicherheit auch das falsche Werkzeug.
-
-
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