Differences From Artifact [23b837d278]:
- File
src/socket.m
— part of check-in
[8f810ecb7e]
at
2018-08-11 14:00:46
on branch trunk
— Change the layout of of_socket_address_t
Instead of containing a struct sockaddr_storage - which does not exist
on all supported platforms - it now contains a union of all struct
sockaddr_* types.Additionally, if struct sockaddr_in6 does not exist, it is defined so
that an IPv6 can be stored even if the system does not support IPv6. (user: js, size: 14200) [annotate] [blame] [check-ins using]
To Artifact [62a31a2fc1]:
- File
src/socket.m
— part of check-in
[75d2d3ba01]
at
2018-08-11 14:29:25
on branch trunk
— OFDNSResourceRecord: Use of_socket_address_t
This avoids unnecessary string construction and parsing and removes
duplicate code to convert an address into a string. (user: js, size: 14194) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
237 238 239 240 241 242 243 | of_socket_address_t ret; struct sockaddr_in *addrIn = &ret.sockaddr.in; OFArray OF_GENERIC(OFString *) *components; uint32_t addr; memset(&ret, '\0', sizeof(ret)); ret.family = OF_SOCKET_ADDRESS_FAMILY_IPV4; | | | 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | of_socket_address_t ret; struct sockaddr_in *addrIn = &ret.sockaddr.in; OFArray OF_GENERIC(OFString *) *components; uint32_t addr; memset(&ret, '\0', sizeof(ret)); ret.family = OF_SOCKET_ADDRESS_FAMILY_IPV4; ret.length = sizeof(ret.sockaddr.in); addrIn->sin_family = AF_INET; addrIn->sin_port = OF_BSWAP16_IF_LE(port); components = [IPv4 componentsSeparatedByString: @"."]; if ([components count] != 4) |
︙ | ︙ | |||
301 302 303 304 305 306 307 | void *pool = objc_autoreleasePoolPush(); of_socket_address_t ret; struct sockaddr_in6 *addrIn6 = &ret.sockaddr.in6; size_t doubleColon; memset(&ret, '\0', sizeof(ret)); ret.family = OF_SOCKET_ADDRESS_FAMILY_IPV6; | | | 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 | void *pool = objc_autoreleasePoolPush(); of_socket_address_t ret; struct sockaddr_in6 *addrIn6 = &ret.sockaddr.in6; size_t doubleColon; memset(&ret, '\0', sizeof(ret)); ret.family = OF_SOCKET_ADDRESS_FAMILY_IPV6; ret.length = sizeof(ret.sockaddr.in6); #ifdef AF_INET6 addrIn6->sin6_family = AF_INET6; #else addrIn6->sin6_family = AF_UNSPEC; #endif addrIn6->sin6_port = OF_BSWAP16_IF_LE(port); |
︙ | ︙ |