Re: Sockets mit C unter FreeBSD

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Fri, 16 Sep 2005 00:38:25 +0200

On Thu, Sep 15, 2005 at 11:53:21PM +0200, Matthias Fechner wrote:
> Hallo Oliver,
>
> * 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.
>
> Wie kann ich denn das verbinden?

Ein Socket ist letzlich nur ein spezieller Filedescriptor.
fopen schluckt neben Filenamen auch solche.
Stdio für Sockets muss man aber mit Vorsicht geniessen, da stdio
für echte Dateien gedacht ist und dadurch auch einige Erwartungen
stellt.
Dank Threading ist immerhin IO-Multiplexing/non-blocking kein hartes
Argument mehr, aber denoch kann die Gegenstelle z.B. mit TCP-out-of-Band
Messages oder einseitigem close für einigen Chaos Sorgen.
Unabhängig davon hast du immer wieder das Problem, dass du nicht
zwischen Timeout bedingtem close und Beabsichtigem unterscheiden
kannst, da muss dein Protokoll schon Hilfe leisten.

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

Ich empfehle dir Stevens Unix Network Programming Volume 1.
Geht allerdings nicht auf stdio und sonstige Programmiersprachen
spezifische Funktionen ein.

PS: Vergesse nicht dich um sigpipe zu kümmern, wenn du mit Sockets
    arbeitest.
    Beliebter Fehler bei unerfahrenen.

-- 
B.Walter                   BWCT                http://www.bwct.de
bernd(at)bwct.de                                  info(at)bwct.de
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 - 00:39:42 CEST

search this site