As it is stated in the Linux man
page
Use this constant as the level argument to
getsockopt
orsetsockopt
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?
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.
SOL_TCP. TCP_STDURG. Specifies location of urgent byte (replaced with sysctl call)
RETURN VALUEUpon successful completion, setsockopt() shall return 0. Otherwise, -1 shall be returned and errno set to indicate the error.
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.
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
SOL_SOCKET
is the socket layer itself. It is used for options that are protocol independent.
You can read more here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With