有什么 linux 命令可以判断一个 某个进程的 socket 是否开启了 SO_REUSEADDR?

图片.png

先问了一下 chatGPT,但是没有什么效果

为什么我要问这个问题,因为我想知道 nginx、uvicorn、gunicorn 这些 HTTP sever 的 socket 是否开启了 SO_REUSEADDR
阅读 1.8k
1 个回答

看来 #1010000043750446 你已经自己发现答案了。

终端里怎么查看 Socket 参数我还真不太清楚,不过 Linux 提供了相关的系统调用 getsockopt,你可以写一个简单的 C 程序来查看。(感觉上应该有某些内置命令封装好了 getsockopt,但还真没见过)

不过如果你只是想确认这些程序的 Socket 参数的话,开源项目我们有更简单的方式 —— 读源码嘛!

以 nginx 为例:

https://github.com/nginx/nginx/blob/master/src/core/ngx_connection.c#L500

可以看到确实是设置了 SO_REUSEADDR 的,而且是一旦尝试设置失败了,会直接抛出异常,中断服务启动。

推荐问题
宣传栏