summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/bsd/bind.c
diff options
context:
space:
mode:
authorBenjamin Riefenstahl <b.riefenstahl@turtle-trading.net>2022-06-10 20:39:28 +0000
committerOri Bernstein <ori@eigenstate.org>2022-06-10 20:39:28 +0000
commit25a0d57478500aed9669e0492583523665afd49d (patch)
treebc25b6916b05ea32d206df1b7d3ab210d48cda9c /sys/src/ape/lib/bsd/bind.c
parentd618223086e32bc26d64eb20bfcb3de31536782f (diff)
ape/bsd/bind.c, ape/bsd/listen.c: Set local IP.
Despite what the man pages say, local addresses can actually be set so do that.
Diffstat (limited to 'sys/src/ape/lib/bsd/bind.c')
-rw-r--r--sys/src/ape/lib/bsd/bind.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/src/ape/lib/bsd/bind.c b/sys/src/ape/lib/bsd/bind.c
index db89cce96..f48ecf69f 100644
--- a/sys/src/ape/lib/bsd/bind.c
+++ b/sys/src/ape/lib/bsd/bind.c
@@ -24,7 +24,7 @@
int
bind(int fd, void *a, int alen)
{
- int n, len, cfd, port;
+ int n, len, cfd;
struct sockaddr *sa;
Rock *r;
char msg[128];
@@ -55,17 +55,23 @@ bind(int fd, void *a, int alen)
errno = EBADF;
return -1;
}
- port = _sock_inport(&r->addr);
- snprintf(msg, sizeof msg, "bind %d", port);
+
+ strcpy(msg, "bind ");
+ _sock_inaddr2string(r, msg + 5, sizeof msg - 5);
+
n = write(cfd, msg, strlen(msg));
if(n < 0){
errno = EOPNOTSUPP; /* Improve error reporting!!! */
close(cfd);
return -1;
}
+
close(cfd);
- if(port <= 0)
+
+ if(_sock_inport(&r->addr) <= 0)
_sock_ingetaddr(r, &r->addr, 0, "local");
return 0;
}
+
+