I was trying to debug port allocation problems in Jenkins on OS X by listening to certain ports with netcat, which led to some weird results.
In a terminal on OS X 10.8.2:
$ uname -rs
Darwin 12.2.1
$ nc -l 54321
Then in an second terminal:
$ nc -l 54321
And in a third terminal, lsof
shows that both instances have bound to the same port:
$ lsof -i | grep 54321
nc 70706 chris 3u IPv4 0x55618c024692f4d1 0t0 TCP *:54321 (LISTEN)
nc 70769 chris 3u IPv4 0x55618c0232cb8661 0t0 TCP *:54321 (LISTEN)
On Linux:
First terminal:
$ uname -rs
Linux 3.2.0-34-generic
$ nc -l 54321
Second terminal:
$ nc -l 54321
nc: Address already in use
Why doesn't OS X also report that the address is already in use?
lsof -i
output syntaxis, but what are0x55618c024692f4d1
and0x55618c0232cb8661
? If it are IP addresses, then it's obviously because the listener was bound to a specific IP address and not the "any" address. – Valleryfork()
ordup()
). – Kellumlsof -i
gives me 27 unique values for that field ("DEVICE"); I believe it's a memory address. The final column shows that the sockets are bound to*
. – Farleigh