mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
tcp: fix SO_RCVLOWAT and RCVBUF autotuning
Applications might use SO_RCVLOWAT on TCP socket hoping to receive one [E]POLLIN event only when a given amount of bytes are ready in socket receive queue. Problem is that receive autotuning is not aware of this constraint, meaning sk_rcvbuf might be too small to allow all bytes to be stored. Add a new (struct proto_ops)->set_rcvlowat method so that a protocol can override the default setsockopt(SO_RCVLOWAT) behavior. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
10b19aeac1
commit
d1361840f8
6 changed files with 29 additions and 1 deletions
|
@ -905,7 +905,10 @@ set_rcvbuf:
|
|||
case SO_RCVLOWAT:
|
||||
if (val < 0)
|
||||
val = INT_MAX;
|
||||
sk->sk_rcvlowat = val ? : 1;
|
||||
if (sock->ops->set_rcvlowat)
|
||||
ret = sock->ops->set_rcvlowat(sk, val);
|
||||
else
|
||||
sk->sk_rcvlowat = val ? : 1;
|
||||
break;
|
||||
|
||||
case SO_RCVTIMEO:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue