显示套接字选项

我如何从shell中看到什么套接字选项被设置? 特别是我很有兴趣知道SO_BROADCAST是否被设置?

你可以使用lsof(8) 。 如果PID是进程ID, FD是您感兴趣的套接字的文件描述符编号,则可以这样做:

 lsof -a -p PID -d FD -T f 

要列出进程的所有IPv4套接字:

 lsof -a -p PID -i 4 -T f 

这将打印出一个SO=插座选项,以及其他信息。 请注意,如果没有设置任何选项,你会得到空字符串,所以你会看到像SO=PQLEN=0等东西。为了测试SO_BROADCAST ,只是grep字符串SO_BROADCAST之后的SO= ,例如

 if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then # socket has SO_BROADCAST else # it doesn't fi 

在Linux上,可以使用knetstat内核模块检查套接字选项,包括SO_BROADCAST