Using a sockaddr_storage and casting a sockaddr pointer to it breaks
C's aliasing rules.
See:
https://bugzilla.redhat.com/show_bug.cgi?id=448743
Replacing sockaddr_storage makes this code less likely to break when
optimized by gcc. It also saves a significant amount of stack space
by replacing a 130 byte structure with a union that is less than 32
bytes.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>