正如 Linux
man
页面中所述
使用此常量作为
或getsockopt
的 level 参数来操作本节中描述的套接字级选项setsockopt
但我不明白这个解释。
SOL_SOCKET
的目的是什么?它有什么作用?
当检索或设置套接字选项时,您可以指定选项名称和级别。当 level =
SOL_SOCKET
时,将在套接字本身中搜索该项目。
例如,假设我们想要将套接字选项设置为重用地址为1(on/true),我们传入“级别”
SOL_SOCKET
以及我们希望将其设置为的值。
int value = 1;
setsockopt(mysocket, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
这会将我套接字中的
SO_REUSEADDR
设置为 1。
我自己也被困在这个问题上,文档非常神秘。这里有更详细的文档:http://pubs.opengroup.org/onlinepubs/7908799/xns/getsockopt.html
SOL_SOCKET
是套接字层本身。它用于独立于协议的选项。
您可以在这里阅读更多内容。
是的,这很令人困惑。以下是 netinet_in.h(0p) Linux 手册页中的不同可用级别:
The <netinet/in.h> header shall define the following symbolic
constants for use as values of the level argument of getsockopt()
and setsockopt():
IPPROTO_IP Internet protocol.
IPPROTO_IPV6 Internet Protocol Version 6.
IPPROTO_ICMP Control message protocol.
IPPROTO_RAW Raw IP Packets Protocol.
IPPROTO_TCP Transmission control protocol.
IPPROTO_UDP User datagram protocol.
因此您可以指定特定级别将影响哪些套接字“类型”。正如另一个答案所说,
SOL_SOCKET
用于“协议独立”选项。