- memset(&local, 0, sizeof(struct sockaddr_in));
- local.sin_family = AF_INET;
- local.sin_port = htons(src_port);
+ memset(&local, 0, sizeof(local));
+ switch (family) {
+ case AF_INET:
+ sin = (struct sockaddr_in *)&local;
+ sin->sin_len = sizeof(struct sockaddr_in);
+ sin->sin_family = family;
+ sin->sin_port = htons(src_port);
+ break;
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *)&local;
+ sin6->sin6_len = sizeof(struct sockaddr_in6);
+ sin6->sin6_family = family;
+ sin6->sin6_port = htons(src_port);
+ break;
+ }