扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:hcyo 来源:赛迪网技术社区 2007年11月2日
关键字: Linux
协议的映射完成了,现在要进行服务的映射了。上层当然不可能知道下层的什么协议能对应特定的服务,所以这种映射自然由协议族自己完成。在TCP/IP协议族里,这种映射是通过struct list_head inetsw[SOCK_MAX]( net/ipv4/af_inet.c)这个数组进行映射的,在谈论这个数组之前我们来看另外一个数组:
|
我们看到,SOCK_STREAM映射到了TCP协议,SOCK_DGRAM映射到了UDP协议,SOCK_RA W映射到了IP协议。现在只要把inetsw_array里的三项添加到数组inetsw[SOCK_MAX]就可以了,添加是通过函数inet_register_protosw()实现的。在inet_init()(net/ipv4/af_inet.c) 里完成了这些工作。
还有一个需要映射的就是socket其它诸如accept,send(),connect(),release(),bind()等的操作函数是怎么映射的呢?我们来看一下上面的数组的TCP的项:
|
我们看到这种映射是通过ops,和prot来映射的,我们再来看看 tcp_prot这一项:
|
所以的映射都已经完成了,用户调用connect()函数,其实就是调用了tcp_v4_connect()函数,按照这幅图,读起源码来就简单了很多了。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。