套接字类型的区别

时间:2014-07-15 22:37:42

标签: python sockets

是的,我确实已经尝试找到相关信息。

Python套接字文档列出了我认为是协议的列表:

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报头到TCP的数据?)

Python文档说我可以在套接字的Unix文档中找到有关上述内容的信息,但我找不到该文档。有谁知道它在哪里?

1 个答案:

答案 0 :(得分:5)

有很多Linux手册页描述socket:

通常,我们将这些参数用于socket

  1. 地址系列:互联网域地址系列AF_INET,UNIX域地址系列AF_UNIX

  2. 套接字类型:TCP的SOCK_STREAM,UDP的SOCK_DGRAM。当然,您可以使用SOCK_RAW直接访问IP协议。

  3. 协议:使用TCP或UDP时,将其保留为0就好了;使用RAW时,可以指定协议为0,TCP套接字为IPPROTO_TCP,UDP套接字为IPPROTO_UDP。

  4. 并且,SO_表示"套接字选项",SOL_表示"套接字选项级别",用于通过{{1}设置套接字选项}(也在SOCKET中提到)。

    事实上,您可以在setsockopt部分的这些页面底部找到更多页面。请注意,2或3的页面是具体的系统调用或库函数,页面7是您需要的。