recv: Was ist, wenn die Gegenseite nicht mehr da ist?
-
ja und es funktioniert
-
ich flehe dich an, nimm select(), poll() oder waitformultipleshit(). kapsele es wenn noetig und mach preprocessor directives drum herum fuer bedingte compilierung.
aber um gottes willen benutz keine 2000 threads. das ist overkill.
-
ja ist ja gut
Aber trotzdem funktioniert select() nur mit 64 Usern. Oder ist es später bei Debian Linux anders? DORT muss es dann mit 2.000 Usern fertig werden, kann ich denn einfach so FD_SETSIZE erhöhen ohne Komplikationen?
MfG, Herr-Vorragend
-
Hab grad gesehen, dass auf Debian FD_SETSIZE auf 1.024 gesetzt ist. Kann ich diesen Wert nun einfach auf z.B. 4.096 erhöhen?
-
Herr-Vorragend schrieb:
hm, also SO_RCVTIMEO ist nur in Windows verfügbar und in Unix nicht, fällt also schon mal weg.
oh, wußte gar nicht, daß es sowas schönes gibt.
ok, ich werde meine sockets unter win mit SO_RCVTIMEO ausstatten. das erspart mir viel ärger.und nn zu der linux-these.
ich tippe "man 7 socket" ein und er sagt mir
[quote=Linux 2.6.11-co-0.6.3-pre13]SO_RCVTIMEO and SO_SNDTIMEO
Specify the receiving or sending timeouts until reporting an error. The parameter is a struct
timeval. If an input or output function blocks for this period of time, and data has been sent or
received, the return value of that function will be the amount of data transferred; if no data has
been transferred and the timeout has been reached then -1 is returned with errno set to EAGAIN or
EWOULDBLOCK just as if the socket was specified to be nonblocking. If the timeout is set to zero
(the default) then the operation will never timeout.[/quote]
das sieht mir danach aus, als könne ich das nehmen. das erspart mir ja ungemein viel select-ärger.
-
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...