- 論壇徽章:
- 0
|
在send,sendto的系統(tǒng)調用中,最后都是會調用到- 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是各協(xié)議注冊的處理函數(shù),其定義為int(*sendmsg) (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t total_len);
其實現(xiàn)為:
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結構,而實現(xiàn)里面是sock結構,這兩種結構的定義差別很大,沒有包含性,轉換的話數(shù)據(jù)應該對應不上吧 |
|