Bruce Allan wrote: > > How about this instead (a combination of your comment above and glibc's > definition of sockaddr_storage): > #define _SS_MAXSIZE 128 > #define _ALIGNSIZE (sizeof(struct sockaddr *)) > #if ULONG_MAX > 0xffffffff > #define __ss_aligntype __u64 > #else > #define __ss_aligntype __u32 > #endif > struct sockaddr_storage { > sa_family_t ss_family; > __ss_aligntype __data[(_SS_MAXSIZE/sizeof(__ss_aligntype))-1]; > } __attribute__ ((aligned(_ALIGNSIZE))); > Hmmm... this seemed to generate a 124-byte struct instead of the stated intent of 128. Maybe instead: #define _SS_MAXSIZE 128 #if ULONG_MAX > 0xffffffff #define __ss_aligntype __u64 #else #define __ss_aligntype __u32 #endif #define _ALIGNSIZE (sizeof(__ss_aligntype)) struct sockaddr_storage { sa_family_t ss_family; __ss_aligntype __data[_SS_MAXSIZE/_ALIGNSIZE-1] __attribute__ ((aligned(_ALIGNSIZE))); } __attribute ((aligned(_ALIGNSIZE))); Align the struct on _ALIGNSIZE; align _data on _ALIGNSIZE to to generate padding between ss_family and __data. Best Regards, jon - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html