diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-03-31 18:52:45 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-03-31 18:52:45 +0200 |
commit | b6dc4ba5a44a2ed2a68266598ceb28b7a7d51af2 (patch) | |
tree | b2af773db48a3606bd078055db925dbba6d4ffaa /sys/src/ape/lib/bsd/bind.c | |
parent | 9c7e1db701e0e80b42bb5990e2f6839d712bb984 (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.c | 16 |
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; } |