Why can't I bind to 127.0.0.1 on Mac OS X?
Posted
by
Noah Lavine
on Server Fault
See other posts from Server Fault
or by Noah Lavine
Published on 2011-02-06T20:53:17Z
Indexed on
2011/02/06
23:28 UTC
Read the original article
Hit count: 303
Hello,
I'm trying to set up a simple web server on Mac OS X, and I keep getting an error when I run bind
. Here's what I'm running (this transcript uses GNU Guile, but just as a convenient interface to posix).
(define addr (inet-aton "127.0.0.1")) ; get internal representation of 127.0.0.1
(define sockaddr (make-socket-address AF_INET addr 8080)) ; make a struct sockaddr
(define sock (socket PF_INET SOCK_STREAM 0)) ; make a socket
(bind sock sockaddr) ; bind the socket to the address
That gives me the error In procedure bind: can't assign requested address
.
So I tried it again allowing any address.
(define anyaddr (make-socket-address AF_INET INADDR_ANY 8080)) ; allow any address
(bind sock anyaddr)
And that works fine. But it's weird, because ifconfig lo0
says
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
So the loopback device is assigned to 127.0.0.1
. So my question is, why can't I bind to that address?
Thanks.
Update: the output of route get 127.0.0.1
is
route to: localhost
destination: localhost
interface: lo0
flags: <UP,HOST,DONE,LOCAL>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
49152 49152 0 0 0 0 16384 0
© Server Fault or respective owner