Erhöhung der Grenze von FD_SETSIZE und wählen Sie
Will ich erhöhen, makro FD_SETSIZE Wert für mein system.
Gibt es eine Möglichkeit, zu erhöhen FD_SETSIZE so wählen Sie nicht scheitern
InformationsquelleAutor der Frage Vivek Goel | 2011-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß den standards, es gibt keine Möglichkeit, zu erhöhen
FD_SETSIZE
. Einige Programme und Bibliotheken (libevent in den Sinn kommt) versuchen, dies zu umgehen, werden durch die Zuweisung zusätzlicher Platz für diefd_set
- Objekt und übergeben von Werten größer alsFD_SETSIZE
zu denFD_*
Makros, aber das ist eine sehr schlechte Idee, da robuste Implementierungen durchführen können bounds-checking auf das argument, und Abbrechen, wenn es außerhalb des Bereichs.Habe ich eine Alternative Lösung, die sollte immer funktionieren (obwohl es nicht erforderlich ist, um von den standards). Statt einer einzigen
fd_set
Objekt, alloziert ein array von Ihnen groß genug, um halten Sie die max fd, die Sie brauchen, dann verwenden SieFD_SET(fd%FD_SETSIZE, &fds_array[fd/FD_SETSIZE])
etc. um auf die Gruppe.InformationsquelleAutor der Antwort R..
Ich auch vorschlagen, mit
poll
wenn möglich. Und es gibt mehrere "event" - Verarbeitung-Bibliotheken wie libevent oder libev (oder das Ereignis Fähigkeiten Glib von GTK oder QtCoreetc), die Ihnen helfen sollen. Es gibt auch Dinge wie epoll. Und ein problem in Bezug auf C10kInformationsquelleAutor der Antwort Basile Starynkevitch
Wäre es besser (und einfacher) zu ersetzen, mit poll. In der Regel poll() ist eine einfache drop-in-Ersatz für select() und ist nicht begrenzt durch die 1024 von FD_SETSIZE...
wird:
Müssen Sie Umfrage.h für die pollfd Struktur.
Wenn Sie brauchen, um zu schreiben, sowie Lesen, dann stellen Sie die Ereignisse Flagge als POLLIN | POLLOUT.
InformationsquelleAutor der Antwort Simon Gymer
Ist es möglich, zu erhöhen FD_SETSIZE overiding __FD_SETSIZE (definiert in
sys/types.h
) vor, einschließlichsys/select.h
.Fortfahren möchten, dass wir
FD_SETSIZE
zu2048
:drucken :
Jedoch, wenn die FD_SETSIZE ist nach dem geänderten Wert, sizeof(fd_set) sollte 256 (2048/8) und nicht 128 (1024/8).
Dies ist, weil darunter
sys/types.h
schon definieren, fd_set mit 1024.Um einen größeren
fd_set
ist es möglich, zu definieren, ein erweitertes einer wie dieser :Diese Drucke :
Um mehr zu öffnen als 1024 filedescriptors, es ist notwendig, um den Grenzwert erhöhen z.B. mit
ulimit -n 2048
.InformationsquelleAutor der Antwort mpromonet
gibt es eigentlich IST ein Weg zur Steigerung der FD_SETSIZE auf windows. seine Definition in winsock.h und pro microsoft selbst können Sie erhöhen, indem Sie einfach es zu definieren, BEVOR Sie winsock.h
http://support.microsoft.com/kb/111855
Ich tun es die ganze Zeit und haben keine Probleme hatte größte Wert, den ich verwendet habe, war um 5000 für einen server ich war, die Entwicklung
InformationsquelleAutor der Antwort BrierMay