在 macOS Catalina 中, 先是 nginx 监听了4000端口, 后写程序监听4000端口竟然没有出错.
接着在 linux 中测试, 同样的程序同样的端口, linux 却报错
然后找到这个问题
和 SO_REUSEPORT 有关
参考链接
linux 在3.9引入SO_REUSEPORT特性, 支持多个进程或者线程绑定到同一端口,提高服务器程序的性能
所以。在mac上的表现应该是这个问题。
SO_REUSEPORT 选项分发数据包的方法是计算对端IP、端口加上本地IP、端口这四个值的哈希值,通过这个哈希值将数据包分发到不同进程上。