epoll TCP Server

#1144093
Lesenswert?

Hi,

ich wollte fragen ob jemand von euch schonmal epoll für die 
Netzwerkprogrammierung verwendet hat. Ich würde das nämlich gern für 
einen TCP Server nutzen, aber ich find keinen richtigen BeispielCode im 
Internet.. Die ManPages und google helfen mir auch nicht sehr weit!

Hat jemand von euch zufällig Code und Erfahrung damit und könnte mir 
unter die Arme greifen?

Gruß, Pascal

P.S.: Ich programmiere unter und für Linux
#1144599
Lesenswert?

Pascal O. wrote:
> ich wollte fragen ob jemand von euch schonmal epoll für die
> Netzwerkprogrammierung verwendet hat. Ich würde das nämlich gern für
> einen TCP Server nutzen, aber ich find keinen richtigen BeispielCode im
> Internet.. Die ManPages und google helfen mir auch nicht sehr weit!

Ich würde dir vorschlagen, gleich die libevent(*) zu verwenden, statt 
direkt mit epoll zu arbeiten.

Damit bleibst du kompatibel zu anderen unix-Geschmacksrichtungen, und 
kannst z.B. (auf *BSD) kqueue statt epoll verwenden, was nochmals einen 
tick schneller ist.


*) http://monkey.org/~provos/libevent/
#1144667
Lesenswert?

> Ich kann mir kaum vorstellen, das eine umstellung von poll/select auf
> epoll wirklich die performace verändert.
> Hast du ein paar mehr Infos zu epoll, was dich das vermuten lässt?

select fliegt schonmal wg. der üblichen Beschränkung auf Sockets mit 
FH<1024 raus.
und poll hat einen gewissen overhead, weil bei jedem Durchlauf die 
Datenstruktur sequentiell durchlaufen werden muss, d.h. festzustellen 
welche Sockets grad aktiv sind hat eine komplexität von O(n).
epoll hingegen O(1).
macht bei wenigen Verbindungen kaum einen Unterschied, bei >10000 
offenen TCP-Connections hingegen schon einen deutlichen.

> das geht leider nicht, da ich den code auf servern laufen lasse, auf die
> ich so keinen admin zugriff habe.

Wenn du auf den Servern select/poll verwenden kannst, lässt das darauf 
schliessen, dass du einen Compiler benutzen darfst. Das reicht auch 
schon, um die libevent zu verwenden. Die muss ja nicht unbedingt 
systemweit installiert sein, es reicht ja, wenn deine Anwendung dagegen 
linkt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren