diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 8f67ced8d6a8..a6000fbad294 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -691,7 +691,8 @@ set_rcvbuf: | |||
691 | 691 | ||
692 | case SO_KEEPALIVE: | 692 | case SO_KEEPALIVE: |
693 | #ifdef CONFIG_INET | 693 | #ifdef CONFIG_INET |
694 | if (sk->sk_protocol == IPPROTO_TCP) | 694 | if (sk->sk_protocol == IPPROTO_TCP && |
695 | sk->sk_type == SOCK_STREAM) | ||
695 | tcp_set_keepalive(sk, valbool); | 696 | tcp_set_keepalive(sk, valbool); |
696 | #endif | 697 | #endif |
697 | sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool); | 698 | sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool); |
@@ -1523,7 +1524,14 @@ EXPORT_SYMBOL(sock_rfree); | |||
1523 | 1524 | ||
1524 | void sock_edemux(struct sk_buff *skb) | 1525 | void sock_edemux(struct sk_buff *skb) |
1525 | { | 1526 | { |
1526 | sock_put(skb->sk); | 1527 | struct sock *sk = skb->sk; |
1528 | |||
1529 | #ifdef CONFIG_INET | ||
1530 | if (sk->sk_state == TCP_TIME_WAIT) | ||
1531 | inet_twsk_put(inet_twsk(sk)); | ||
1532 | else | ||
1533 | #endif | ||
1534 | sock_put(sk); | ||
1527 | } | 1535 | } |
1528 | EXPORT_SYMBOL(sock_edemux); | 1536 | EXPORT_SYMBOL(sock_edemux); |
1529 | 1537 | ||