.. | .. |
---|
6 | 6 | * Desired design of maximum size and alignment (see RFC2553) |
---|
7 | 7 | */ |
---|
8 | 8 | #define _K_SS_MAXSIZE 128 /* Implementation specific max size */ |
---|
9 | | -#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *)) |
---|
10 | | - /* Implementation specific desired alignment */ |
---|
11 | 9 | |
---|
12 | 10 | typedef unsigned short __kernel_sa_family_t; |
---|
13 | 11 | |
---|
| 12 | +/* |
---|
| 13 | + * The definition uses anonymous union and struct in order to control the |
---|
| 14 | + * default alignment. |
---|
| 15 | + */ |
---|
14 | 16 | struct __kernel_sockaddr_storage { |
---|
15 | | - __kernel_sa_family_t ss_family; /* address family */ |
---|
16 | | - /* Following field(s) are implementation specific */ |
---|
17 | | - char __data[_K_SS_MAXSIZE - sizeof(unsigned short)]; |
---|
| 17 | + union { |
---|
| 18 | + struct { |
---|
| 19 | + __kernel_sa_family_t ss_family; /* address family */ |
---|
| 20 | + /* Following field(s) are implementation specific */ |
---|
| 21 | + char __data[_K_SS_MAXSIZE - sizeof(unsigned short)]; |
---|
18 | 22 | /* space to achieve desired size, */ |
---|
19 | 23 | /* _SS_MAXSIZE value minus size of ss_family */ |
---|
20 | | -} __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ |
---|
| 24 | + }; |
---|
| 25 | + void *__align; /* implementation specific desired alignment */ |
---|
| 26 | + }; |
---|
| 27 | +}; |
---|
21 | 28 | |
---|
22 | 29 | #endif /* _UAPI_LINUX_SOCKET_H */ |
---|