Messages in this thread Patch in this message | | | Date | Wed, 05 Nov 2008 03:36:47 -0800 (PST) | Subject | Re: Honoring SO_RCVLOWAT in proto_ops.poll methods | From | David Miller <> |
| |
From: swivel@shells.gnugeneration.com Date: Sun, 19 Oct 2008 22:58:19 -0500
> From what I can see the recv() MSG_PEEK fix is trivial anyways, why not > fix it?
Does this patch work for you?
tcp: Fix recvmsg MSG_PEEK influence of blocking behavior.
Vito Caputo noticed that tcp_recvmsg() returns immediately from partial reads when MSG_PEEK is used. In particular, this means that SO_RCVLOWAT is not respected.
Simply remove the test. And this matches the behavior of several other systems, including BSD.
Signed-off-by: David S. Miller <davem@davemloft.net> --- net/ipv4/tcp.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index eccb716..c5aca0b 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1374,8 +1374,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, sk->sk_state == TCP_CLOSE || (sk->sk_shutdown & RCV_SHUTDOWN) || !timeo || - signal_pending(current) || - (flags & MSG_PEEK)) + signal_pending(current)) break; } else { if (sock_flag(sk, SOCK_DONE)) -- 1.5.6.5
| |