diff options
author | Jan Engelhardt <jengelh@medozas.de> | 2009-08-04 07:28:28 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-05 13:02:56 -0700 |
commit | 49c794e94649020248e37b78db16cd25bad38b4f (patch) | |
tree | 76c455522d37fa0fa88c7466bb494523cb320fab /net/core/sock.c | |
parent | c1c00ab8626298ac784ea344bf10e94b5bd9bcb5 (diff) | |
download | kernel-crypto-49c794e94649020248e37b78db16cd25bad38b4f.tar.gz kernel-crypto-49c794e94649020248e37b78db16cd25bad38b4f.tar.xz kernel-crypto-49c794e94649020248e37b78db16cd25bad38b4f.zip |
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>
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index a324a80c163..ebce661234a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -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) |