Re: freebsd: unix socket programmering

From: Michael Rasmussen (none@mir--datanom.net.lh.bsd-dk.dk)
Date: Wed 09 Jul 2008 - 21:53:35 CEST


Date: Wed, 9 Jul 2008 21:53:35 +0200
From: Michael Rasmussen <none@mir--datanom.net.lh.bsd-dk.dk>
To: bsd-dk@bsd-dk.dk
Subject: Re: freebsd: unix socket programmering


On Wed, 9 Jul 2008 20:26:10 +0200
Michael Knudsen <none@e--molioner.dk.lh.bsd-dk.dk> wrote:

> Quoting Mic J (michael.cognacc@gmail.com):
> .]
> > > On Sun, 4 May 2008 12:08:17 +0200
> > > Michael Rasmussen <none@mir--datanom.net.lh.bsd-dk.dk> wrote:
> > >> memset(&addr_u, 0, sizeof(struct sockaddr_un));
> > >>
> > > skal være: memset(&addr_u, 0, sizeof(addr_u))
> > > Egentligt logisk nok i bagklogskabens klare lys:-)
> >
> > Hvorfor er det logisk, bør en size of struct (type) ikke være samme
> > størrelse som
> > en instans af typen, (optimering ?), ja jeg siger jo ikke det
> > forkert :), kan bare ikke lige se det skulle gøre en forskel
> > logisk. det skulle vel ikke give en forskel
> > selvom der er en invalid værdi i sun_len?
> > Så hvad sker der egentligt.
> > Nogen der har en god forklaring?
>
> Mit umiddelbare bud er, at han har aendret noget andet. (: Der er
> ikke forskel.
>
Næ, det skyldes at struct sockaddr_un har følgende definition:
#define UNIX_PATH_MAX 108

struct sockaddr_un {
   sa_family_t sun_family; /* AF_UNIX */
   char sun_path[UNIX_PATH_MAX]; /* pathname */
};

sizeof (struct sockaddr_un) vil altid returnere 109, da sun_path er et
array med plads til 108 bytes. Den faktiske længde af sun_path er ikke
en konstant, da længden afhænger af den givne path - ikke brugte
pladser i array vil være 0-paddet. Derfor vil strlen(sun_path) variere,
mens sizeof(sun_path) vil være en konstant.

-- 
Hilsen/Regards
Michael Rasmussen

Get my public GnuPG keys: michael <at> rasmussen <dot> cc http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xD3C9A00E mir <at> datanom <dot> net http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE501F51C mir <at> miras <dot> org http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917 -------------------------------------------------------------- printk("ufs_read_super: fucking Sun blows me\n"); linux-2.0.38/fs/ufs/ufs_super.c




This archive was generated by hypermail 2b30 : Thu 31 Jul 2008 - 23:00:01 CEST