aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2012-09-08 12:49:03 -0400
committerRuss Cox <rsc@swtch.com>2012-09-08 12:49:03 -0400
commit1c996338485a3515b8557562f68b0455b1c5a507 (patch)
treef15b253d1ead93fa17d07fc34b668c43cb12f0bb /src
parent3dade5fe59d80e9d23916d15db93ea39407f694e (diff)
downloadplan9port-1c996338485a3515b8557562f68b0455b1c5a507.tar.gz
plan9port-1c996338485a3515b8557562f68b0455b1c5a507.tar.bz2
plan9port-1c996338485a3515b8557562f68b0455b1c5a507.zip
lib9: fix announce on OS X
R=rsc http://codereview.appspot.com/6495109
Diffstat (limited to 'src')
-rw-r--r--src/lib9/_p9dialparse.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib9/_p9dialparse.c b/src/lib9/_p9dialparse.c
index cc91408d..da23a412 100644
--- a/src/lib9/_p9dialparse.c
+++ b/src/lib9/_p9dialparse.c
@@ -60,7 +60,7 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport)
ss = phost;
- memset(ss, 0, sizeof(ss));
+ memset(ss, 0, sizeof *ss);
*punix = nil;
net = addr;
@@ -108,14 +108,17 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport)
/* translate host */
if(strcmp(host, "*") == 0){
ss->ss_family = AF_INET6;
+ ss->ss_len = sizeof(struct sockaddr_in6);
((struct sockaddr_in6*)ss)->sin6_addr = in6addr_any;
}else if((he = gethostbyname(host)) != nil){
ss->ss_family = he->h_addrtype;
switch(ss->ss_family){
case AF_INET:
+ ss->ss_len = sizeof(struct sockaddr_in);
((struct sockaddr_in*)ss)->sin_addr = *(struct in_addr*) *(he->h_addr_list);
break;
case AF_INET6:
+ ss->ss_len = sizeof(struct sockaddr_in6);
((struct sockaddr_in6*)ss)->sin6_addr = *(struct in6_addr*) *(he->h_addr_list);
break;
default:
@@ -123,13 +126,12 @@ p9dialparse(char *addr, char **pnet, char **punix, void *phost, int *pport)
return -1;
}
}else if(getaddrinfo(host, NULL, NULL, &result) == 0) {
- ss->ss_family = result->ai_family;
- switch (ss->ss_family) {
+ switch (result->ai_family) {
case AF_INET:
- memcpy((struct sockaddr_in*)ss, result->ai_addr, result->ai_addrlen);
+ memmove((struct sockaddr_in*)ss, result->ai_addr, result->ai_addrlen);
break;
case AF_INET6:
- memcpy((struct sockaddr_in6*)ss, result->ai_addr, result->ai_addrlen);
+ memmove((struct sockaddr_in6*)ss, result->ai_addr, result->ai_addrlen);
break;
default:
errstr("unknown protocol family %d", ss->ss_family);