Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is SOL_SOCKET used for?

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?

like image 948
Blake Avatar asked Feb 02 '14 20:02

Blake


People also ask

Why do we use Setsockopt?

The setsockopt function sets the current value for a socket option associated with a socket of any type, in any state. Although options can exist at multiple protocol levels, they are always present at the uppermost socket level.

What is Sol_tcp?

SOL_TCP. TCP_STDURG. Specifies location of urgent byte (replaced with sysctl call)

What does Setsockopt return?

RETURN VALUEUpon successful completion, setsockopt() shall return 0. Otherwise, -1 shall be returned and errno set to indicate the error.

What is So_reuseaddr?

The SO_REUSEADDR socket option allows a socket to forcibly bind to a port in use by another socket. The second socket calls setsockopt with the optname parameter set to SO_REUSEADDR and the optval parameter set to a boolean value of TRUE before calling bind on the same port as the original socket.


2 Answers

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

like image 194
jspacek Avatar answered Oct 03 '22 23:10

jspacek


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

You can read more here.

like image 44
demo.b Avatar answered Oct 03 '22 23:10

demo.b