Use getsockname(2) to determine actual port when listening on :0

Author: mochaaPCreated May 29, 2020Updated Jun 17, 2026
Labelsenhancement

What version of shadowsocks-libev are you using?

shadowsocks-libev 3.3.4

What operating system are you using?

Darwin / Linux

What did you do?

Doing bind() on port 0 can acquire a random unused port, see https://eklitzke.org/binding-on-port-zero Run ss-local -s <server> -p <port> -m <method> -k <key> -l 0

What did you expect to see?

1970-01-01 00:00:00 INFO: listening at 127.0.0.1:<randomized port>

What did you see instead?

1970-01-01 00:00:00 INFO: listening at 127.0.0.1:0

What is your config in detail (with all sensitive info masked)?

Darwin Kernel Version 18.7.0 Linux 5.6.15.zen2-1

Source: shadowsocks/shadowsocks-libev