summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/bsd/bind.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-03-31 18:52:45 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-03-31 18:52:45 +0200
commitb6dc4ba5a44a2ed2a68266598ceb28b7a7d51af2 (patch)
treeb2af773db48a3606bd078055db925dbba6d4ffaa /sys/src/ape/lib/bsd/bind.c
parent9c7e1db701e0e80b42bb5990e2f6839d712bb984 (diff)
ape: initial IPv6 support, inet_pton()/inet_ntop(), getaddrinfo()/getnameinfo()
Diffstat (limited to 'sys/src/ape/lib/bsd/bind.c')
-rw-r--r--sys/src/ape/lib/bsd/bind.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/src/ape/lib/bsd/bind.c b/sys/src/ape/lib/bsd/bind.c
index 040c62fa0..902fbcd46 100644
--- a/sys/src/ape/lib/bsd/bind.c
+++ b/sys/src/ape/lib/bsd/bind.c
@@ -24,10 +24,9 @@
int
bind(int fd, void *a, int alen)
{
- int n, len, cfd;
+ int n, len, cfd, port;
Rock *r;
char msg[128];
- struct sockaddr_in *lip;
/* assign the address */
r = _sock_findrock(fd, 0);
@@ -42,7 +41,7 @@ bind(int fd, void *a, int alen)
memmove(&r->addr, a, alen);
/* the rest is IP sepecific */
- if (r->domain != PF_INET)
+ if (r->domain != PF_INET && r->domain != PF_INET6)
return 0;
cfd = open(r->ctl, O_RDWR);
@@ -50,9 +49,9 @@ bind(int fd, void *a, int alen)
errno = EBADF;
return -1;
}
- lip = (struct sockaddr_in*)&r->addr;
- if(lip->sin_port > 0)
- snprintf(msg, sizeof msg, "bind %d", ntohs(lip->sin_port));
+ port = _sock_inport(&r->addr);
+ if(port > 0)
+ snprintf(msg, sizeof msg, "bind %d", port);
else
strcpy(msg, "bind *");
n = write(cfd, msg, strlen(msg));
@@ -62,9 +61,8 @@ bind(int fd, void *a, int alen)
return -1;
}
close(cfd);
-
- if(lip->sin_port <= 0)
- _sock_ingetaddr(r, lip, &len, "local");
+ if(port <= 0)
+ _sock_ingetaddr(r, &r->addr, 0, "local");
return 0;
}