Re: Sockets mit C unter FreeBSD

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 14 Sep 2005 14:21:46 +0200 (CEST)

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 message
Received on Wed 14 Sep 2005 - 14:22:44 CEST

search this site