SOL_SOCKET有什么用?

问题描述 投票:0回答:3

正如 Linux

man
页面中所述

使用此常量作为

getsockopt
setsockopt
的 level 参数来操作本节中描述的套接字级选项

但我不明白这个解释。

SOL_SOCKET
的目的是什么?它有什么作用?

c sockets network-programming
3个回答
136
投票

当检索或设置套接字选项时,您可以指定选项名称和级别。当 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


12
投票

SOL_SOCKET
是套接字层本身。它用于独立于协议的选项。

您可以在这里阅读更多内容。


0
投票

是的,这很令人困惑。以下是 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
用于“协议独立”选项。

© www.soinside.com 2019 - 2024. All rights reserved.