關於socket create 跟 bind 中有個地方不懂 煩請各位幫忙

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

關於socket create 跟 bind 中有個地方不懂 煩請各位幫忙

文章rz600000 » 週五 6月 27, 2008 4:17 am

static int packet_create(struct socket *sock, int protocol)
{
.......................

1025 if (proto) {
1026 po->prot_hook.type = proto;
1027 dev_add_pack(&po->prot_hook);
1028 sock_hold(sk);
1029 po->running = 1;
1030 }

..............................
}

上面是 packet_create的code 我看到他在上面有一行 dev_add_pack 不就是把
packet_type 註冊到 ptype_base <- 此為L4 layer 的接收packet function 的list

而我又在 packet_do_bind function 中看到 也有dev_add_pack
static int packet_do_bind(struct sock *sk, struct net_device *dev, __be16 protocol)
{
.......................
890 if (dev) {
891 if (dev->flags&IFF_UP) {
892 dev_add_pack(&po->prot_hook);
893 sock_hold(sk);
894 po->running = 1;
895 } else {
896 sk->sk_err = ENETDOWN;
897 if (!sock_flag(sk, SOCK_DEAD))
898 sk->sk_error_report(sk);
899 }
900 } else {
901 dev_add_pack(&po->prot_hook);
902 sock_hold(sk);
903 po->running = 1;
904 }
..........................
}

現在我所要問的問題是 : 在 packet socket create 中 已經有一次 dev_add_pack()
而為什麼 在我執行 bind socket 時 也要 dev_add_pack()

dev_add_pack() 不是將 L4 rcv function 註冊到 ptype_base 中嗎

還是有其他的用意


感恩~~~
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客