我正在研究tcp / ip实现,特别是套接字层,而且我对一些结构还不太了解。
我知道'struct proto_ops'用于定义操作,例如bind / connect / accept,每个socket都有一个指定的proto_ops。
另一方面,'struct proto'定义了新协议,结构也定义了accept / bind / setsockopt / getsockopt / etc的函数指针。方法
我在$ linux / net /中读了很多代码,我看不到它在哪里使用'struct proto'定义的操作,所以我不确定这些方法是如何在代码中使用的?< / p>
有人可以为我澄清一下吗? 感谢。
答案 0 :(得分:3)
你可以像这样形象。有三层:
BSD sock->inet sock->tcp/udp sock
相应的操作:
BSD api->proto_ops->proto
如果您阅读sys_socket()和sys_read(),您将得到相同的答案。
希望这可以帮到你:-)
答案 1 :(得分:3)
我认为当新手尝试创建新协议时,问题是最令人头痛的问题
<强>说明:强> 两个结构都具有相似名称的成员元素,尽管它们代表不同的功能
示例:强> 当你在用户空间中调用系统调用时,ex connect(),将首先调用prot_ops_connect()。
希望这个帮助