【发布时间】:2009-10-24 13:46:18
【问题描述】:
我想测试是否已在现有套接字上设置了特定的套接字选项。即,您可以在其中看到的几乎所有内容:
#!/usr/bin/env python
'''See possible TCP socket options'''
import socket
sockettypelist = [x for x in dir(socket) if x.startswith('SO_')]
sockettypelist.sort()
for sockettype in sockettypelist:
print sockettype
任何人都知道我如何查看现有 套接字上的选项,即由其他进程创建的那些?唉,我读过的关于 Python 套接字编程的几乎所有文档都是关于制作新套接字的。
【问题讨论】:
-
您能否更准确地了解您想要实现的确切(即什么应用程序,以及您为什么想了解套接字选项)?如前所述,我不认为你想要什么是可能的 - 在 python 或其他方式中。
-
当然。我希望能够测试第三方应用程序是否正确设置,例如,keepalive,以避免在未设置时在我的环境中出现已知问题。我没有访问第三方应用程序的源代码。
-
开始回答我自己的问题:一些研究表明 Linux netstat 中的 '-o' 'timers' 选项还显示了进程上的套接字选项。跟踪这表明有关套接字选项的信息保存在 Linux 上 /proc/net/tcp 的最后一个字段中。我正在调查 Python procfs 模块是否可以处理这个问题,或者我需要创建自己的模块...
-
Hrm 似乎 /proc/net/tcp 不包含所有套接字选项(至少不是我感兴趣的 NODELAY) - 请参阅 lkml.indiana.edu/hypermail/linux/kernel/0409.1/2166.html 。是时候在别处继续搜索了……
-
相关:stackoverflow.com/questions/8014151/… - 有办法做到这一点(但不是在 Python 中)。
标签: linux sockets setsockopt systemtap