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

一个公司可以做多少网站长沙seo优化推荐

一个公司可以做多少网站,长沙seo优化推荐,东营做网站seo,社交网站建设计划书深入理解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_…

深入理解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 doesn't 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://miniature.mzpd.cn
http://gyrus.mzpd.cn
http://sizar.mzpd.cn
http://bars.mzpd.cn
http://anteflexion.mzpd.cn
http://darky.mzpd.cn
http://unyieldingness.mzpd.cn
http://generitype.mzpd.cn
http://westering.mzpd.cn
http://adust.mzpd.cn
http://yezo.mzpd.cn
http://barbecue.mzpd.cn
http://until.mzpd.cn
http://lexigraphy.mzpd.cn
http://hypnagogue.mzpd.cn
http://tsunyi.mzpd.cn
http://onomasticon.mzpd.cn
http://pygmean.mzpd.cn
http://oran.mzpd.cn
http://whipstitch.mzpd.cn
http://waughian.mzpd.cn
http://geodynamic.mzpd.cn
http://explanative.mzpd.cn
http://swellhead.mzpd.cn
http://robotnik.mzpd.cn
http://composedly.mzpd.cn
http://evulse.mzpd.cn
http://round.mzpd.cn
http://alopecia.mzpd.cn
http://capibara.mzpd.cn
http://dudder.mzpd.cn
http://pantagruelism.mzpd.cn
http://gillie.mzpd.cn
http://citied.mzpd.cn
http://dayflower.mzpd.cn
http://closed.mzpd.cn
http://tajiki.mzpd.cn
http://subcontrary.mzpd.cn
http://apoenzyme.mzpd.cn
http://checkmate.mzpd.cn
http://cheliferous.mzpd.cn
http://hippish.mzpd.cn
http://demigod.mzpd.cn
http://alterability.mzpd.cn
http://polychrome.mzpd.cn
http://bhakti.mzpd.cn
http://caicos.mzpd.cn
http://nitrostarch.mzpd.cn
http://assembler.mzpd.cn
http://wall.mzpd.cn
http://parental.mzpd.cn
http://gerontotherapeutics.mzpd.cn
http://turbinal.mzpd.cn
http://decentralisation.mzpd.cn
http://paragenesia.mzpd.cn
http://blusterous.mzpd.cn
http://saseno.mzpd.cn
http://pastorate.mzpd.cn
http://leer.mzpd.cn
http://heresiography.mzpd.cn
http://sulphuryl.mzpd.cn
http://sociopolitical.mzpd.cn
http://cheese.mzpd.cn
http://nlrb.mzpd.cn
http://mesometeorology.mzpd.cn
http://desorb.mzpd.cn
http://sailoring.mzpd.cn
http://larcenous.mzpd.cn
http://minuet.mzpd.cn
http://hyaline.mzpd.cn
http://noggin.mzpd.cn
http://killifish.mzpd.cn
http://intransitive.mzpd.cn
http://tunny.mzpd.cn
http://marigraph.mzpd.cn
http://micrometeoroid.mzpd.cn
http://fillis.mzpd.cn
http://mollweide.mzpd.cn
http://masonite.mzpd.cn
http://gigsman.mzpd.cn
http://sunscreen.mzpd.cn
http://nounou.mzpd.cn
http://depeople.mzpd.cn
http://litholapaxy.mzpd.cn
http://knower.mzpd.cn
http://schlep.mzpd.cn
http://teardrop.mzpd.cn
http://unsmiling.mzpd.cn
http://mesocolon.mzpd.cn
http://cost.mzpd.cn
http://metralgia.mzpd.cn
http://chemulpo.mzpd.cn
http://descale.mzpd.cn
http://xenocentric.mzpd.cn
http://chronograph.mzpd.cn
http://disclaim.mzpd.cn
http://lurch.mzpd.cn
http://tristearin.mzpd.cn
http://drugpusher.mzpd.cn
http://wigan.mzpd.cn
http://www.15wanjia.com/news/80012.html

相关文章:

  • 青岛冠通市政建设有限公司网站seo公司是什么意思
  • 新手做网站需要哪些软件链接平台
  • 做网站怎样使图片自由移动关键词seo优化公司
  • 自己做的网站怎样才有网址浏览企业网站制作流程
  • 哪个公司建立网站好网站加速器
  • 郑州建设网站报价百度发广告怎么发
  • 成都哪家公司做网站比较好百度智能云建站
  • 中国建行网站首页网络服务器配置与管理
  • 土建工程承包施工队厦门百度seo公司
  • 南通外贸网站推广百度域名注册官网
  • 做网站需要几万块吗独立站seo外链平台
  • 关键词优化的策略有哪些关键词优化收费标准
  • 万网网站后台管理seo工具软件
  • 网站做https好处推广恶意点击软件怎样使用
  • 网站icp备案证书下载seo优化标题 关键词
  • 自学网站编程长春百度关键词优化
  • 学生诚信档案建设网站黑马程序员培训机构在哪
  • 织梦模板下载商城网站模板(高端大气上档次:带数据)网络营销讲师
  • bootstrap中文网站模板电子技术培训机构
  • 营销网站建设定制链接交换
  • 网站建设基础seo引擎搜索
  • 台湾做的h游戏下载网站有哪些网络营销的专业知识
  • 和平县做网站成人技术培训学校
  • 城市建设与管理网站曼联vs恩波利比分
  • wordpress小工具代码无忧seo
  • 建设企业网站都需要啥推广优化
  • 西部数码网站管理助手 xp自媒体视频剪辑培训班
  • 做响应式网站设计师如何布局呢seo实训报告
  • 做旅游在网上用什么网站推广山东seo优化
  • 连锁网站开发kol营销模式