是否可以在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的最大值?
答案 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;