Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418432
  • 博文数量: 82
  • 博客积分: 2600
  • 博客等级: 少校
  • 技术积分: 961
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-08 21:44
文章分类
文章存档

2013年(2)

2012年(56)

2010年(24)

我的朋友

分类: LINUX

2012-06-12 22:04:25

socket流程
(af_inet udp)
 
数据结构
struct socket;
struct sock;

socket创建
socket() 
sys_socket()  --> kernel, socket.c
sock_create()
pf->create()  --> net_families,sock_register(),Create a packet,struct sock.

socket接收
应用层调用recvfrom()
sys_recvfrom()
sock_recvmsg()
__sock_recvmsg()
sock->ops->recvmsg() --> 在socket被创建时赋值inet_dgram_ops.
sock_common_recvmsg()
sk->sk_prot->recvmsg() --> sk_prot在sk_alloc()中被赋值为udp_prot.
udp_recvmsg()
skb_recv_datagram() --> 检查等待sk->sk_receive_queue中的数据
自下而上往sk_receive_queue中填充数据
...... 这里省略
udp_rcv()
__udp4_lib_rcv()
__udp4_lib_lookup() --> 查找到对应的sock
udp_queue_rcv_skb()
sock_queue_rcv_skb() --> jump to sock.c
skb_queue_tail() --> add to sk->sk_receive_queue

socket发送
sys_sendto()
sock_sendmsg()
__sock_sendmsg()
sock->ops->sendmsg()
inet_sendmsg()
sk->sk_prot->sendmsg()
udp_sendmsg()
ip_route_output_flow() --> 交给路由,之后省略
 
阅读(1979) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~