diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 02f8dfe320b7..19942d4bb6e6 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -793,6 +793,12 @@ set_rcvbuf: | |||
793 | sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool); | 793 | sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool); |
794 | break; | 794 | break; |
795 | 795 | ||
796 | case SO_PEEK_OFF: | ||
797 | if (sock->ops->set_peek_off) | ||
798 | sock->ops->set_peek_off(sk, val); | ||
799 | else | ||
800 | ret = -EOPNOTSUPP; | ||
801 | break; | ||
796 | default: | 802 | default: |
797 | ret = -ENOPROTOOPT; | 803 | ret = -ENOPROTOOPT; |
798 | break; | 804 | break; |
@@ -1018,6 +1024,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
1018 | v.val = !!sock_flag(sk, SOCK_WIFI_STATUS); | 1024 | v.val = !!sock_flag(sk, SOCK_WIFI_STATUS); |
1019 | break; | 1025 | break; |
1020 | 1026 | ||
1027 | case SO_PEEK_OFF: | ||
1028 | if (!sock->ops->set_peek_off) | ||
1029 | return -EOPNOTSUPP; | ||
1030 | |||
1031 | v.val = sk->sk_peek_off; | ||
1032 | break; | ||
1021 | default: | 1033 | default: |
1022 | return -ENOPROTOOPT; | 1034 | return -ENOPROTOOPT; |
1023 | } | 1035 | } |
@@ -2092,6 +2104,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) | |||
2092 | 2104 | ||
2093 | sk->sk_sndmsg_page = NULL; | 2105 | sk->sk_sndmsg_page = NULL; |
2094 | sk->sk_sndmsg_off = 0; | 2106 | sk->sk_sndmsg_off = 0; |
2107 | sk->sk_peek_off = -1; | ||
2095 | 2108 | ||
2096 | sk->sk_peer_pid = NULL; | 2109 | sk->sk_peer_pid = NULL; |
2097 | sk->sk_peer_cred = NULL; | 2110 | sk->sk_peer_cred = NULL; |