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

From: Jens Rehsack <rehsack(at)liwing.de>
Date: Sat, 08 Nov 2003 12:46:17 +0000

Matthias Teege wrote:
> Jens Rehsack <rehsack(at)liwing.de> writes:
>
>
>>>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,
>
>
> Ja, mir auch, zumal ich jetzt gerade noch festgestellt habe, dass
> das Verhalten auch noch von sa_family abhängig ist. Damit das
> Programm richtig arbeitet musste ich gerade folgenden Hack
> produzieren:
>
> if (sa->sa_family=AF_INET) {
> if (-1 == bind (sockfd, sa, socksize))
> die2 ("bind");
> }
> else if (sa->sa_family=AF_UNIX)
> {
> if (-1 == bind (sockfd, sa, socksize+1))
> die2 ("bind");
> } else {
>
> ....

Habe da großen Bullshit erzählt. Siehe lieber die folgenden
Postings von Till und mir.

>>bins(2) nachsehen. Müsste irgendwo unter /usr/src/lib/libc
>>zu finden sein.
>
> Ja, werde ich mal tun.

Siehe /usr/include/sys/un.h - viel besser :-)

>>Wahrscheinlich, weil das abschließende '\0' zu einem
>>null terminierten String gehört.
>
> Ja, aber das wären dann eben 8 und nicht 9 Byte.

Sind aber sizeof(struct sockaddr_un).

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 - 13:46:52 CET

search this site