Приветствую,Пытаюсь разобраться в коде 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', кем и где они задействованы?
Буду признателен за пояснения. Спасибо.
> Но нигде в коде в $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()