Frage zu Socket
-
Hallo,
ich hab mich ein wenig mit Sockets beschäftigt, bis jetzt nur mit www.zotteljedi.de als Quelle.
Wobei Ich eine Frage habe:
(Wie) ist es möglich zu überprüfen ob etwas vom Socket zulesen ist.
-
man: select(2)
man: poll(2)
epolletc.
-
schließe mich mal diesem Thread an, mit meiner frage zu Timeouts auf connect() und zwar habe ich nun nicht-blockierende sockets verwendet und select() um einen timeout auf connect() zu erzeugen. Gibt es evtl. eine andere, weiter verbreiterte _bessere_ Methode? Denn er schreibt dort: "Nicht-blockierende Sockets...Für alle, die es dennoch tun wollen, hier Code der's tut.." klingt nicht grad nach beliebtheit.
Habe dann trotzdem dies hier gebastelt, nur gibt connect nun immer -1 zurück und meistens kommt dann verbunden, obwohl er es gar nicht ist. Ist das so in ordnung?
... fcntl(sock, F_SETFL, O_NONBLOCK); saddr_dest.sin_family = AF_INET; saddr_dest.sin_port = htons(port); saddr_dest.sin_addr = *((struct in_addr *)host->h_addr); r = connect(sock, (struct sockaddr *)&saddr_dest, sizeof (saddr_dest)); if (r < 0 && errno != EINPROGRESS ) { close(sockfd); quit("connect()"); } tv.tv_sec = timeout; FD_ZERO(&rset); FD_SET(sockfd, &rset); r = select(sock, &rset, &rset, (fd_set *)0, &tv); if (r <= 0) { close(sock); quit("Connection timed out!"); } fcntl(sock, F_SETFL, 0); ...
Danke für jede kommende Hilfe.
-
Wir leben in einer OpenSource-Welt. Da kann man durchaus mal nachschauen, wie es andere machen.
Der Apache-Webserver verwendet poll für das Timeout. Schaut einfach mal rein.
Alternativ gibt es zahlreiche Bibliotheken, die das ganze sauber in c++ kapseln, wie z. B. meine eigene cxxtools (http://www.tntnet.org/cxxtools.bhtm) oder auch socket++.Gruß
Tommi
-
bestätigt.
http://www.tntnet.org/cxxtools.bhtm und die ganze site ist voller feiner ideen. unbedingt angucken.
-
volkard schrieb:
und die ganze site ist voller feiner ideen. unbedingt angucken.
da hat einer 'nen tomcat für c++ gebastelt
-
Hi,
ja - ich war's! Tntnet ist sowas wie ein Tomcat für C++. Solltet Ihr Euch unbedingt mal anschauen. Ich habe es letztes Jahr auf der LinuxWorld in Frankfurt vorgestellt und werde auch dieses Jahr wieder dabei sein.
Ich bin sehr überzeugt von dem Produkt. Endlich ist es möglich, leistungsfähige und kompakte Webapplikationen mit der besten Programmiersprace, die es gibt (C++) zu erstellen.
Leider hat Tntnet noch nicht die Bedeutung erreicht, die es meiner Meinung nach erhalten sollte, aber vielleicht habt Ihr ja Interesse, die Anwenderschaar zu erweitern.Gruß
Tommi