What is SOL_SOCKET used for?
Asked Answered
M

3

53

As it is stated in the Linux man page

Use this constant as the level argument to getsockopt or setsockopt to manipulate the socket-level options described in this section

But I don't get this explanation. What is the purpose of SOL_SOCKET? What does it do?

Marty answered 2/2, 2014 at 20:40 Comment(0)
M
12

SOL_SOCKET is the socket layer itself. It is used for options that are protocol independent.

You can read more here.

Musky answered 2/2, 2014 at 20:53 Comment(1)
Can u please elaborateDina
E
137

When retrieving a socket option, or setting it, you specify the option name as well as the level. When level = SOL_SOCKET, the item will be searched for in the socket itself.

For example, suppose we want to set the socket option to reuse the address to 1 (on/true), we pass in the "level" SOL_SOCKET and the value we want it set to.

int value = 1;    
setsockopt(mysocket, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));

This will set the SO_REUSEADDR in my socket to 1.

I was stuck on this myself, the documentation is extremely cryptic. Slightly more detailed documentation here: http://pubs.opengroup.org/onlinepubs/7908799/xns/getsockopt.html

Embonpoint answered 19/11, 2014 at 18:57 Comment(0)
M
12

SOL_SOCKET is the socket layer itself. It is used for options that are protocol independent.

You can read more here.

Musky answered 2/2, 2014 at 20:53 Comment(1)
Can u please elaborateDina
P
1

Yes, this is confusing. Here are the different avaliable levels from the netinet_in.h(0p) Linux manual page:

   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.

So you can specify which "types" of sockets a specific level will affect. As the other answer said, SOL_SOCKET is for "protocol independent" options.

Patmore answered 23/5, 2024 at 23:22 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.