- assert(total);
- *len = 0;
- while (*len < total) {
- int ret = send(fd, buf + *len, total - *len, 0);
- if (ret == -1)
- return -ERRNO_TO_PARA_ERROR(errno);
- *len += ret;
+ if (ss->ss_family == AF_INET)
+ ia.s_addr = ((struct sockaddr_in *)ss)->sin_addr.s_addr;
+ if (ss->ss_family == AF_INET6) {
+ const struct in6_addr v6_addr = ((struct sockaddr_in6 *)ss)->sin6_addr;
+
+ if (IN6_IS_ADDR_V4MAPPED(&v6_addr))
+ memcpy(&ia.s_addr, &(v6_addr.s6_addr[12]), 4);