套接字类型的区别
是的,我已经尝试过寻找相关的信息。
Python的socket文档里有一份我认为是协议的列表:
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)
这到底是做什么的?我知道这是一个原始socket,但IPPROTO_IP是不是意味着我得自己构建所有东西?(也就是说,从IP头到TCP再到数据?)
Python的文档说我可以在Unix的socket文档中找到关于上述内容的信息,但我找不到那个文档。有人知道在哪里吗?
1 个回答
8
有很多关于套接字的Linux手册页面:
一般来说,我们在使用socket
的时候会用到这些参数:
地址族:
AF_INET
表示互联网地址族,AF_UNIX
表示UNIX地址族。套接字类型:
SOCK_STREAM
用于TCP,SOCK_DGRAM
用于UDP。当然,你也可以使用SOCK_RAW
来直接访问IP协议。协议:使用TCP或UDP时,协议参数可以设为0;如果使用原始套接字,可以指定协议为0,TCP套接字用IPPROTO_TCP,UDP套接字用IPPROTO_UDP。
另外,SO_
表示“套接字选项”,SOL_
表示“套接字选项级别”,这些都是通过setsockopt
来设置套接字选项的(在SOCKET中也提到过)。
实际上,你可以在这些页面的底部找到更多的页面,查看SEE ALSO
部分。注意,2或3号页面是具体的系统调用或库函数,而7号页面是你需要的内容。