49

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?

nbro
  • 15,395
  • 32
  • 113
  • 196
Blake
  • 7,367
  • 19
  • 54
  • 80

2 Answers2

129

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

nbro
  • 15,395
  • 32
  • 113
  • 196
jspacek
  • 1,895
  • 3
  • 13
  • 16
10

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

You can read more here.

eagleflo
  • 1,184
  • 9
  • 14
demo.b
  • 3,299
  • 2
  • 29
  • 29