Matthias Fechner <idefix(at)fechner.net> wrote:
> ich habe hier ein Program geschrieben, welches eine TCP/IP
> Verbindung mit socket aufmacht (listen, accept, etc.).
>
> Das klappt auch wunderbar, jetzt habe ich allerdings eine sehr
> spezielle Frage.
>
> Mit dem Befehl recv kann ich angeben, wieviel Byte ich aus dem Socket
> lesen will.
> Meine Frage jetzt hier, wieviel Daten kann der Socket speichern?
> Ich denke es handelt sich hier über Buffer im TCP/IP stack, konnte
> aber leider nicht drüber finden.
>
> Um mein Programm möglichst schnell zu machen, würde ich gerne ziemlich
> grosse Packete übertragen, die ich dann Zeile für Zeile mit dem recv
> Kommando auslese (hierzu habe ich mir eine Routine geschrieben, die
> genau bis zu \n mit recv liest).
Das klingt für mich eigentlich nach einem typischen Fall
von »premature optimization«.
Ich an Deiner Stelle würde recv() vergessen und stattdessen
einfach fgets() verwenden. Deine Beschreibung hört sich
nämlich ganz danach an, als würdest Du einen Teil von fgets()
(nämlich Puffern und Lesen bis '\n') nachprogrammieren und
das Rad neu erfinden, ohne daß es einen Grund dafür gibt.
Das Buffern übernimmt stdio bereits für Dich; darum mußt Du
Dich auch nicht kümmern. Du kannst den Buffer sogar selbst
mit setvbuf() einstellen, wenn Du willst (in der Praxis sind
aber meistens die Defaults völlig ausreichend).
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing Any opinions expressed in this message may be personal to the author and may not necessarily reflect the opinions of secnetix in any way. "C++ is the only current language making COBOL look good." -- Bertrand Meyer To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Wed 14 Sep 2005 - 14:22:44 CEST