当前位置: 首页 > news >正文

网站做竞价对seo有影响吗中美俄最新军事新闻

网站做竞价对seo有影响吗,中美俄最新军事新闻,建筑品牌网站,肇庆网站制作软件深入理解Linux网络#xff08;二#xff09;#xff1a;UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, udp_… 深入理解Linux网络二UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, udp_table, IPPROTO_UDP); }int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, int proto) {sk __udp4_lib_lookup_skb(skb, uh-source, uh-dest, udptable);if (sk ! NULL) {int ret udp_queue_rcv_skb(sk, skb);}icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); }__udp4_lib_lookup_skb 是根据 skb 来寻找对应的socket当找到以后将数据包放到 socket 的缓存队列⾥。如果没有找到则发送⼀个⽬标不可达的 icmp 包。 //file: net/ipv4/udp.c int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) { ......if (sk_rcvqueues_full(sk, skb, sk-sk_rcvbuf))goto drop;rc 0;ipv4_pktinfo_prepare(skb);bh_lock_sock(sk);if (!sock_owned_by_user(sk))rc __udp_queue_rcv_skb(sk, skb);else if (sk_add_backlog(sk, skb, sk-sk_rcvbuf)) {bh_unlock_sock(sk);goto drop;}bh_unlock_sock(sk);return rc; }sock_owned_by_user 判断的是⽤户是不是正在这个 socket 上进⾏系统调⽤ socket 被占⽤。 如果没有那就可以直接放到 socket 的接收队列中。 如果有那就通过 sk_add_backlog 把数据包添加到 backlog 队列。 当⽤户释放的 socket 的时候内核会检查 backlog 队列如果有数据再移动到接收队列中。 sk_rcvqueues_full 接收队列如果满了的话将直接把包丢弃。接收队列⼤⼩受内核参数 net.core.rmem_max 和 net.core.rmem_default 影响。 二、recvfrom 系统调⽤实现 代码⾥调⽤的 recvfrom 是⼀个 glibc 的库函数该函数在执⾏后会将⽤户进⾏陷⼊到内核态进⼊到 Linux 实现的系统调⽤ sys_recvfrom 。 socket 数据结构中的 const struct proto_ops 对应的是协议的⽅法集合。每个协议都会实现不同的⽅法集对于IPv4 Internet 协议族来说,每种协议都有对应的处理⽅法如下 对于 udp 来说是通过 inet_dgram_ops 来定义的其中注册了 inet_recvmsg ⽅法。 //file: net/ipv4/af_inet.c const struct proto_ops inet_stream_ops {.......recvmsg inet_recvmsg,.mmap sock_no_mmap,...... } const struct proto_ops inet_dgram_ops {.......sendmsg inet_sendmsg,.recvmsg inet_recvmsg,...... }socket 数据结构中的另⼀个数据结构 struct sock *sk 是⼀个⾮常⼤⾮常重要的⼦结构体。其中的 sk_prot ⼜定义了⼆级处理函数。对于udp协议来说会被设置成 udp 协议实现的⽅法集 udp_prot 。 //file: net/ipv4/udp.c struct proto udp_prot {.name UDP,.owner THIS_MODULE,.close udp_lib_close,.connect ip4_datagram_connect,.......sendmsg udp_sendmsg,.recvmsg udp_recvmsg,.sendpage udp_sendpage,...... }看完了 socket 变量之后我们再来看 sys_recvfrom 的实现过程。 在 inet_recvmsg 调⽤了 sk-sk_prot-recvmsg 。 //file: net/ipv4/af_inet.c int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,size_t size, int flags) { ......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; }//file: net/core/datagram.c:EXPORT_SYMBOL(__skb_recv_datagram); struct sk_buff *__skb_recv_datagram(struct sock *sk, unsignedint flags, int *peeked, int *off, int *err) {......do {struct sk_buff_head *queue sk-sk_receive_queue;skb_queue_walk(queue, skb) {......}/* User doesnt want to wait */error -EAGAIN;if (!timeo)goto no_packet;} while (!wait_for_more_packets(sk, err, timeo, last)); }上⾯所谓的读取过程就是访问 sk-sk_receive_queue 。 如果没有数据且⽤户也允许等待则将调⽤ wait_for_more_packets() 执⾏等待操作它加⼊会让⽤户进程进⼊睡眠状态。 具体是怎么进⼊睡眠状态的和 TCP 的实现一样属于进程的基本知识了。 再次推荐飞哥的 《深入理解Linux网络》。
http://www.laogonggong.com/news/108864.html

相关文章:

  • 做粥哪个美食网站好东营兴通建设工程公司网站
  • 网站建设与维护百科wordpress侧边栏
  • 做网站窗体属性栏设置文字居中信息查询
  • wordpress 百度地图api百度搜索优化关键词排名
  • 企业网站对网络营销的意义郑州公司网站制作
  • 网站建设肆金手指排名9区块链开发语言和工具
  • 惠州+网站建设公司北京最近确诊病例轨迹
  • 品牌型网站成功案例图片手机网站开发周期
  • 沁水网站建设企业注册类型
  • 中英繁网站网站重复页面
  • 做seo推广手机网站两学一做网站专栏怎么设置
  • 建网站的步骤和方法上海突发事件
  • 工业设计网站排名建设网站的程序
  • 网站建设先进部门评选标准广东个人网站备案
  • 装修论坛网站有哪些网站搜索排名优化怎么做
  • 广州哪里能买森海塞尔合肥网站排名优化公司
  • 牡丹江网站建设定制开发品牌建设经验做法
  • 网站用什么语言做网站开发语言查询 蔡学镛
  • 公司网站设计专业的小程序制作视频
  • 网站与网页区别是什么做硅胶的网站
  • 茶叶网站策划企业网站设计话术
  • 明星网站怎么设计商城域名
  • 网站建设武清lnmpa安装wordpress
  • 网站建设协议书样本佛山建网站公司哪家好
  • 如何做好一个百度竞价网站vps可以做多少网站
  • 网站备案怎么查织梦网站安装出现404 not found
  • 网站flash效果营销类图片
  • 吉林省水土保持生态建设网站360网站推广费用
  • 网站防火墙怎么做金昌北京网站建设
  • 软件下载类型网站怎么做公司建网站需要先注册域名