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

From: Matthias Teege <matthias-dbsdq(at)mteege.de>
Date: Sat, 08 Nov 2003 14:56:17 +0100

Bernd Walter <ticso(at)cicely12.cicely.de> writes:

> Vorsicht übrigens bei der Verwendung vom SUN_LEN Macro - das ist bei
> einigen Linux Distributionen kaput.
> Am besten berechnest du es mit der FreeBSD Implementation:
> /* actual length of an initialized sockaddr_un */
> #define SUN_LEN(su) \
> (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))

Habe ich eingebaut, funktioniert und die Werte sehen auch aus als
würden sie stimmen.

> Ich vermute, daß du den Fehler auch unter Linux machst, aber Linux
> ignoriert in dem Umfeld etliche Fehler.
> Wie sieht denn deine Berechnung aus?

Ziemlich abgefahren:

                for (i=0;i<sizeof (xsun.sun_path)-1&&str[i]!=':';i++)
                        if ((xsun.sun_path[i] = str[i]) <= ' ') break;
                xsun.sun_path[i] = 0;
                sa = (struct sockaddr *) &xsun;
                socksize = i+sizeof (xsun.sun_family);
                ....

i ist im konkreten Fall 7 und sizeof (xsun.sun_family) ist
(eigentlich immer) 1, zusammen also 8. Linux lebt damit. Die
obige Berechnung von socksize verstehe ich nicht wirklich.

Wie gesagt, mit dem SUN_LEN Macro klappt es.

Bis dann
Matthias

-- 
Matthias Teege -- http://www.mteege.de
make world not war
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 - 15:00:19 CET

search this site