是的,我确实已经尝试查找这方面的信息。
Python 套接字文档包含我认为是协议(protocol)的列表:
SO_*
socket.SOMAXCONN
MSG_*
SOL_*
IPPROTO_*
IPPORT_*
INADDR_*
IP_*
IPV6_*
EAI_*
AI_*
NI_*
TCP_*
他们到底是做什么的?假设我用过
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
这是做什么的?我知道这是一个原始套接字,但是 IPPROTO_IP 是否意味着我必须构建所有内容? (即 IP header 向下到 TCP 到数据?)
Python 文档说我可以在有关套接字的 Unix 文档中找到有关上述内容的信息,但我找不到该文档。有人知道它在哪里吗?
最佳答案
有很多 Linux 手册页描述套接字:
通常,我们将这些参数用于socket
:
地址族:
AF_INET
为互联网域地址族,AF_UNIX
为UNIX域地址族。套接字类型:
SOCK_STREAM
用于 TCP,SOCK_DGRAM
用于 UDP。当然你可以使用SOCK_RAW
直接访问IP协议(protocol)。协议(protocol):使用TCP或UDP时,留0即可;使用 RAW 时,可以将协议(protocol)指定为 0,TCP 套接字为 IPPROTO_TCP,UDP 套接字为 IPPROTO_UDP。
并且,SO_
表示“套接字选项”,SOL_
表示“套接字选项级别”,用于通过setsockopt
设置套接字选项(也在 SOCKET 中提到)。
事实上,您可以在这些页面底部的 SEE ALSO
部分找到更多页面。请注意,第 2 或 3 页是具体的系统调用或库函数,第 7 页是您需要的。
关于python - 套接字类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769338/