这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct sock层次上的数据。即它们之间存在着层次上的差异。struct proto类型的变量在协议栈中总共也有三个,分别是mytcp_prot,myudp_prot,myraw_prot,对应TCP, UD...
sk_prot和sk_prot_creator,这两个成员指向特定的协议处理函数集,其类型是结构体struct proto,该结构体也是跟struct proto_ops相似的一组协议操作函数集。这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct soc...
sk是网络层对于socket的表示,结构体struct sock比较庞大,这里不详细列出,只介绍一些重要的成员, sk_prot和sk_prot_creator,这两个成员指向特定的协议处理函数集,其类型是结构体struct proto,该结构体也是跟struct proto_ops相似的一组协议操作函数集。这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成...
sk是网络层对于socket的表示,结构体struct sock比较庞大,这里不详细列出,只介绍一些重要的成员, sk_prot和sk_prot_creator,这两个成员指向特定的协议处理函数集,其类型是结构体struct proto,该结构体也是跟struct proto_ops相似的一组协议操作函数集。这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成...
该系统调用核心是执行:sock->ops->listen(sock,backlog);也就是说找到服务器的socket后,通过它的协议操作表结构struct proto_ops执行其listen钩子函数,proto_ops协议操作表结构的挂入是在socket创建过程根据协议类型进行设置的,TCP实际挂入的是inet_stream_ops操作表结构,listen在inet_stream_ops表中的赋值如下所示...
conststructproto_ops*ops;//socket函数操作集 }; 在内核中还有struct sock结构体,在struct socket中可以看到那么它们的关系是什么? 1、socket面向上层,sock面向下层的具体协议 2、socket是内核抽象出的一个通用结构体,主要是设置了一些跟fs相关的字段,而真正跟网络通信相关的字段结构体是struct sock ...
1.struct proto_ops { 2.intfamily; 3.struct module *owner; 4.int(*release)(struct socket *sock); 5.int(*bind)(struct socket *sock, struct sockaddr *myaddr,intsockaddr_len); 6.int(*connect)(struct socket *sock, struct sockaddr *vaddr,intsockaddr_len,intflags); 7.int(*socketpair)(...
const struct proto_ops *ops; } struct socket结构体的类型 enum sock_type { SOCK_STREAM = 1, // 用于与TCP层中的tcp协议数据的struct so...
struct nf_hook_ops只是存储勾子的数据结构,而真正存储这些勾子供协议栈调用的是nf_hooks,从定义可以看出,它其实就是二维数组的链表。 struct list_head nf_hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS]; 一、nf_hook_ops中使用常量定义 1、协议/地址簇相关(#include <linux/socket.h>) ...
conststructproto_ops*ops; }; 代码中的注释对于每一个变量说的都很清楚——看到这里,我先感叹一下,linux2.6的结构体的注释比老版本要清楚的多。到目前为止,我所看到的关键的结构体,都有清晰的注释。我们可以看出struct socket中的sock变量,是socket变量的工作核心。