Re: Sockets mit C unter FreeBSD

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Fri, 16 Sep 2005 10:06:49 +0200 (CEST)

Matthias Fechner <idefix(at)fechner.net> wrote:
> * Oliver Fromme <olli(at)lurza.secnetix.de> [14-09-05 14:21]:
> > 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).
>
> das hört sich sehr gut an.
> Ich habe jetzt mal in die man-page reingeschaut und habe dort gesehen,
> das fgets einen stream vom Type FILE haben will.
>
> Aber ich habe ja nur eine socket Nummer.

Ein Socket ist nichts weiter als ein Filedescriptor, und
aus dem kannst Du mit fdopen(3) einen FILE* machen.
Siehe die manpage von fdopen(3).

Danach kannst Du auf den FILE* fast alle üblichen stdio-
Funktionen anwenden, außer natürlich fseek() u.ä. (die
ja z.B. bei Pipes und FIFOs auch nicht funktionieren).

Allerdings solltest Du aufpassen, daß Du dann auch _nur_
stdio-Funktionen verwendest und nichts mehr mit dem
Socket direkt anstellst. Das liegt daran, weil Socket-
bzw. Filedescriptor-Funktionen (recv(), read() usw.)
nichts von stdio's Buffer wissen und daher mit den be-
reits gelesenen Daten durcheinander kommen.

Beim abschließenden fclose() des FILE* wird dann auch
automatisch der Socket geschlossen.

> (sry, bin mit sockets und stream in C oder C++ noch ziemlich blauäugig)

»UNIX Network Programming« (in diesem Fall Vol. 1) von
Stevens ist das Standardwerk zu diesem Thema und sehr
empfehlenswert. Wenn man sich zudem näher mit TCP/IP
auseinadersetzen will (oder muß), sollte auch sein Werk
»TCP/IP Illustrated« nicht im Bücherregal fehlen (Vol. 1
und 2).

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.
 > Can the denizens of this group enlighten me about what the
 > advantages of Python are, versus Perl ?
"python" is more likely to pass unharmed through your spelling
checker than "perl".
        -- An unknown poster and Fredrik Lundh
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 16 Sep 2005 - 10:07:58 CEST

search this site