在sk_buff中获取套接字的套接字ID

时间:2016-08-07 22:26:51

标签: linux sockets kernel

是否可以在ID struct中的linux内核中获取套接字sk_buff? 我知道我可以使用此代码获取socket

const struct tcphdr *th = tcp_hdr(skb);
struct sock *sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
if (sk)
    struct socket* = sk->sk_socket;

我在哪里可以找到ID以及此ID的最大值?

1 个答案:

答案 0 :(得分:0)

套接字是一个文件。

您会在struct socket内找到struct file *file成员。

我建议你look at this question,特别是接受答案的链接"things you never should do in the Kernel",因为我担心你试图从套接字结构中检索文件描述符的原因。内核(通常,你想要完全相反)。

要从内核下的给定文件中检索文件描述符,您需要迭代fdtable(搜索files_fdtable())...这是一项繁重的工作,特别是如果有大量的打开文件。

文件描述符值的最大值将是系统中允许的最大文件数,可以使用以下内容检索:

files_fdtable(current->files)->max_fds;