madeye:test_event 失败由 macOS 文件描述符上限引起
Thanks for the report. This is caused by macOS's default per-process file descriptor limit rather than a bug in the event loop. `test_event` deliberately opens 256 UDP sockets (to exceed Winsock's 64-descriptor `select()` limit) plus a sender socket and the loop's own kqueue descriptor. A stock macOS Terminal session starts with a soft limit of 256 (`ulimit -n` prints `256`), so `socket()` starts returning -1 near the end of that loop and the unchecked descriptor trips the `bind()` assertion you saw. Running with a higher limit already makes the test pass on 3.3.6: ```sh ulimit -n 1024 ctest --test-dir build -L 'unit|vendor' --output-on-failure ``` (节选)
作者原文@madeyeThanks for the report. This is caused by macOS's default per-process file descriptor limit rather than a bug in the event loop.
test_eventdeliberately opens 256 UDP sockets (to exceed Winsock's 64-descriptorselect()limit) plus a sender socket and the loop's own kqueue descriptor. A stock macOS Terminal session starts with a soft limit of 256 (ulimit -nprints256), sosocket()starts returning -1 near the end of that loop and the unchecked descriptor trips thebind()assertion you saw. Running with a higher limit already makes the test pass on 3.3.6:ulimit -n 1024 ctest --test-dir build -L 'unit|vendor' --output-on-failurehttps://github.com/shadowsocks/shadowsocks-c/pull/3060 fixes this properly: CTest now raises the soft limit to 1024 before launching each unit test,
test_eventraises its own limit when run directly, and asocket()failure is now reported as such instead of as abind()failure.