- 论坛徽章:
- 0
|
在send,sendto的系统调用中,最后都是会调用到- static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock,
- struct msghdr *msg, size_t size)
- {
- struct sock_iocb *si = kiocb_to_siocb(iocb);
- int err;
- si->sock = sock;
- si->scm = NULL;
- si->msg = msg;
- si->size = size;
- err = security_socket_sendmsg(sock, msg, size);
- if (err)
- return err;
- return sock->ops->sendmsg(iocb, sock, msg, size);
- }
复制代码 sendmsg是各协议注册的处理函数,其定义为int(*sendmsg) (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t total_len);
其实现为:
int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len)
int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t size)
这里我就不明白,为什么前面调用的时候sock是socket结构,而实现里面是sock结构,这两种结构的定义差别很大,没有包含性,转换的话数据应该对应不上吧 |
|