URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9901
[ Назад ]

Исходное сообщение
"понять 'struct proto' и 'struct proto_ops' в ядре"

Отправлено cruz7 , 06-Сен-14 18:23 
Приветствую,

Пытаюсь разобраться в коде tcp/ip в ядре (2.6.35), конкретно - socket layer.


Я понимаю, что proto_ops нужна для определения операций на сокете, например bind/connect/accept, и каждый сокет (struct sock) имеет указатель на proto_ops.

Кроме того, есть также struct proto, который описывает новый протокол, эта структура также содержит указатели на методы для accept/bind/setsockopt/getsockopt и пр.

Но нигде в коде в $linux/net/ я не встретил примененения методов определенных в 'struct proto', кем и где они задействованы?

Буду признателен за пояснения. Спасибо.


Содержание

Сообщения в этом обсуждении
"понять 'struct proto' и 'struct proto_ops' в ядре"
Отправлено pavlinux , 07-Сен-14 18:21 
> Но нигде в коде в $linux/net/ я не встретил

net/core/sock.c


int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock,
                         struct msghdr *msg, size_t size, int flags)
{
        struct sock *sk = sock->sk;
        int addr_len = 0;
        int err;

        /* тута есть */  
        err = sk->sk_prot->recvmsg(iocb, sk, msg, size, flags & MSG_DONTWAIT, flags & ~MSG_DONTWAIT, &addr_len);
         if (err >= 0)
                 msg->msg_namelen = addr_len;
         return err;
}


> примененения методов определенных в 'struct proto', кем и где они задействованы?

Начинай ковырять с функции sk_alloc()