sock 结构体的 prot 成员

在准备下周一要发表的RAW套接字的PPT,准备了好一段时间,看了挺多代码,才发现,一直在准备套接字的生成和数据发送接受,就没怎么引用到 RAW.C 里面的内容, 都是因为网上没有介绍RAW套接字内核分析的文章,看的文章都是介绍一般的TCP, UDP套接字内核分析,结果我就被引到了别的地方,还全然不知 。。。

 

仔细看了一下,在 inet_protosw 结构体中 关于 SOCK_RAW部分,有个 ops 取的是 inet_sockraw_ops 结构体的地址, 而 inet_sockraw_ops 中 sendmsg, recvmsg 挂钩的函数是 inet_sendmsg, inet_recvmsg, 我就以为 RAW 套接字就是用它们来发送接收数据了,但是发现在 ops 的上面还有个 prot的成员,它指向的是 raw_prot的结构体,这个结构体的声明在这里: http://lxr.linux.no/linux-old+v2.4.31/net/ipv4/raw.c#L685 贴出来如下:

685 struct proto raw_prot = {
686        name:           "RAW",
687        close:          raw_close,
688        connect:        udp_connect,
689        disconnect:     udp_disconnect,
690        ioctl:          raw_ioctl,
691        init:           raw_init,
692        setsockopt:     raw_setsockopt,
693        getsockopt:     raw_getsockopt,
694        sendmsg:        raw_sendmsg,
695        recvmsg:        raw_recvmsg,
696        bind:           raw_bind,
697        backlog_rcv:    raw_rcv_skb,
698        hash:           raw_v4_hash,
699        unhash:         raw_v4_unhash,
700};
这里面挂载的基本上都是 raw.c 里面的函数了,呼,%@¥&*# 在灯火阑珊处。。。。

你可能感兴趣的:(SOC)