net: implement a SO_PROTOCOL getsockoption
Similar to SO_TYPE returning the socket type, SO_PROTOCOL allows to retrieve the protocol used with a given socket. I am not quite sure why we have that-many copies of socket.h, and why the values are not the same on all arches either, but for where hex numbers dominate, I use 0x1029 for SO_PROTOCOL as that seems to be the next free unused number across a bunch of operating systems, or so Google results make me want to believe. SO_PROTOCOL for others just uses the next free Linux number, 38. Signed-off-by: Jan Engelhardt <jengelh@medozas.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c1c00ab862
commit
49c794e946
@@ -482,6 +482,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
||||
sk->sk_reuse = valbool;
|
||||
break;
|
||||
case SO_TYPE:
|
||||
case SO_PROTOCOL:
|
||||
case SO_ERROR:
|
||||
ret = -ENOPROTOOPT;
|
||||
break;
|
||||
@@ -764,6 +765,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
|
||||
v.val = sk->sk_type;
|
||||
break;
|
||||
|
||||
case SO_PROTOCOL:
|
||||
v.val = sk->sk_protocol;
|
||||
break;
|
||||
|
||||
case SO_ERROR:
|
||||
v.val = -sock_error(sk);
|
||||
if (v.val == 0)
|
||||
|
Reference in New Issue
Block a user