Re: unterschiedliche bind(2) Implementierung FreeBSD/Linux?

From: Jens Rehsack <rehsack(at)liwing.de>
Date: Sat, 08 Nov 2003 10:21:19 +0000

Matthias Teege wrote:
> Moin,
>
> ich bin gerade über einen kleinen Unterschied in der Verwendung von
> bind(2) zwischen Linux und FreeBSD gestolpert und habe in der
> Dokumentation nichts gefunden das mir sagt, welche Variante
> "richtig" ist.
>
> Das betreffende Programm möchte den Socket "dev/cgi" mit bind
> behandeln und ruft
>
> bind (sockfd, sa, socksize)
>
> auf. Unter Linux funktioniert das aber ein strace unter BSD zeigt
> mir
>
> bind(0, {sa_family=AF_UNIX, path="dev/cg"}, 8)

Hm, ist mir eigendlich ein Rätsel. Die Bibliotheksfunktion
strncpy(3) müsste den String eigendlich komplett kopieren,
ausser *BSD geht davon aus, dass der String komplett terminiert
ist und tut ein

   strncp( dest, src, len - 1)
   dest[len-1] = 0;

Quasi, nur um sicherzugehen. Kannst ja mal in den Sourcen von
bins(2) nachsehen. Müsste irgendwo unter /usr/src/lib/libc
zu finden sein.

> Hmm, es fehlt das letzte Zeichen. Ich ändere also den Code auf
>
> bind (sockfd, sa, socksize+1)
>
> und siehe da, es wirkt
>
> bind(0, {sa_family=AF_UNIX, path="dev/cgi"}, 9)
>
> Leider ist mir nicht klar, warum BSD einen Länge von 9 Byte anstatt
> 8 braucht.

Wahrscheinlich, weil das abschließende '\0' zu einem
null terminierten String gehört.

> Muss das so oder ist da irgendwo ein Fehler? Das BSD ist ein 4.8.

Siehe socket(2) und bind(2), da müsste es dokumentiert sein,
was richtig ist.

> Vielen Dank
> Matthias
>

Jens

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 08 Nov 2003 - 11:21:55 CET

search this site