tcp: Add tcp_inq to get available receive bytes on socket
Create a common kernel function to get the number of bytes available on a TCP socket. This is based on code in INQ getsockopt and we now call the function for that getsockopt. Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
fa9835e52e
commit
473bd239b8
@@ -1816,4 +1816,28 @@ static inline void skb_set_tcp_pure_ack(struct sk_buff *skb)
|
||||
skb->truesize = 2;
|
||||
}
|
||||
|
||||
static inline int tcp_inq(struct sock *sk)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
int answ;
|
||||
|
||||
if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
|
||||
answ = 0;
|
||||
} else if (sock_flag(sk, SOCK_URGINLINE) ||
|
||||
!tp->urg_data ||
|
||||
before(tp->urg_seq, tp->copied_seq) ||
|
||||
!before(tp->urg_seq, tp->rcv_nxt)) {
|
||||
|
||||
answ = tp->rcv_nxt - tp->copied_seq;
|
||||
|
||||
/* Subtract 1, if FIN was received */
|
||||
if (answ && sock_flag(sk, SOCK_DONE))
|
||||
answ--;
|
||||
} else {
|
||||
answ = tp->urg_seq - tp->copied_seq;
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endif /* _TCP_H */
|
||||
|
Reference in New Issue
Block a user