diff options
author | Benjamin Riefenstahl <b.riefenstahl@turtle-trading.net> | 2022-06-10 20:39:28 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2022-06-10 20:39:28 +0000 |
commit | 25a0d57478500aed9669e0492583523665afd49d (patch) | |
tree | bc25b6916b05ea32d206df1b7d3ab210d48cda9c /sys/src/ape/lib/bsd/bind.c | |
parent | d618223086e32bc26d64eb20bfcb3de31536782f (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.c | 14 |
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; } + + |