---
src/libstddjb/socket_local46.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/libstddjb/socket_local46.c b/src/libstddjb/socket_local46.c
index 448160c..611eb37 100644
--- a/src/libstddjb/socket_local46.c
+++ b/src/libstddjb/socket_local46.c
_at_@ -12,21 +12,23 @@
int socket_local46 (int s, ip46_t *ip, uint16 *port)
{
- struct sockaddr sa ;
+ union {
+ struct sockaddr_in6 sa6 ;
+ struct sockaddr_in sa4 ;
+ struct sockaddr sa ;
+ } sa ;
socklen_t dummy = sizeof sa ;
- if (getsockname(s, &sa, &dummy) < 0) return -1 ;
- if (sa.sa_family == AF_INET6)
+ if (getsockname(s, &sa.sa, &dummy) < 0) return -1 ;
+ if (sa.sa.sa_family == AF_INET6)
{
- register struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)&sa ;
- byte_copy(ip->ip, 16, (char const *)sa6->sin6_addr.s6_addr) ;
- uint16_unpack_big((char *)&sa6->sin6_port, port) ;
+ byte_copy(ip->ip, 16, (char const *)&sa.sa6.sin6_addr.s6_addr) ;
+ uint16_unpack_big((char *)&sa.sa6.sin6_port, port) ;
ip->is6 = 1 ;
}
- else if (sa.sa_family == AF_INET)
+ else if (sa.sa.sa_family == AF_INET)
{
- register struct sockaddr_in *sa4 = (struct sockaddr_in *)&sa ;
- byte_copy(ip->ip, 4, (char const *)&sa4->sin_addr.s_addr) ;
- uint16_unpack_big((char *)&sa4->sin_port, port) ;
+ byte_copy(ip->ip, 4, (char const *)&sa.sa4.sin_addr.s_addr) ;
+ uint16_unpack_big((char *)&sa.sa4.sin_port, port) ;
ip->is6 = 0 ;
}
else return (errno = EAFNOSUPPORT, -1) ;
--
2.4.6
Received on Sun Jul 26 2015 - 19:15:44 UTC
This archive was generated by hypermail 2.3.0 : Sun May 09 2021 - 19:38:49 UTC