@@ -47,11 +47,12 @@ uint16_t port; #if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC) int flags; #endif - if ((_socket = socket(address->sockaddr.sockaddr.sa_family, + if ((_socket = socket( + ((struct sockaddr *)&address->sockaddr)->sa_family, SOCK_DGRAM | SOCK_CLOEXEC | extraType, 0)) == OFInvalidSocketHandle) @throw [OFBindFailedException exceptionWithHost: OFSocketAddressString(address) port: OFSocketAddressPort(address) socket: self @@ -67,11 +68,11 @@ #endif #if defined(OF_HPUX) || defined(OF_WII) || defined(OF_NINTENDO_3DS) if (OFSocketAddressPort(address) != 0) { #endif - if (bind(_socket, &address->sockaddr.sockaddr, + if (bind(_socket, (struct sockaddr *)&address->sockaddr, address->length) != 0) { int errNo = OFSocketErrNo(); closesocket(_socket); _socket = OFInvalidSocketHandle; @@ -91,11 +92,12 @@ while (rnd < 1024) rnd = (uint16_t)rand(); OFSocketAddressSetPort(address, rnd); - if ((ret = bind(_socket, &address->sockaddr.sockaddr, + if ((ret = bind(_socket, + (struct sockaddr *)&address->sockaddr, address->length)) == 0) break; if (OFSocketErrNo() != EADDRINUSE) { int errNo = OFSocketErrNo(); @@ -122,11 +124,11 @@ #if !defined(OF_HPUX) && !defined(OF_WII) && !defined(OF_NINTENDO_3DS) memset(address, 0, sizeof(*address)); address->length = (socklen_t)sizeof(address->sockaddr); - if (OFGetSockName(_socket, &address->sockaddr.sockaddr, + if (OFGetSockName(_socket, (struct sockaddr *)&address->sockaddr, &address->length) != 0) { int errNo = OFSocketErrNo(); closesocket(_socket); _socket = OFInvalidSocketHandle; @@ -136,17 +138,18 @@ port: OFSocketAddressPort(address) socket: self errNo: errNo]; } - if (address->sockaddr.sockaddr.sa_family == AF_INET) + switch (((struct sockaddr *)&address->sockaddr)->sa_family) { + case AF_INET: return OFFromBigEndian16(address->sockaddr.in.sin_port); # ifdef OF_HAVE_IPV6 - else if (address->sockaddr.sockaddr.sa_family == AF_INET6) + case AF_INET6: return OFFromBigEndian16(address->sockaddr.in6.sin6_port); # endif - else { + default: closesocket(_socket); _socket = OFInvalidSocketHandle; @throw [OFBindFailedException exceptionWithHost: OFSocketAddressString(address)