免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1733 | 回复: 2
打印 上一主题 下一主题

[网络子系统] tcp_v4_rcv()函数对数据接收的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-18 18:01 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2014-01-20 11:25 |只看该作者
回复 1# niaocai_123
当接收到一个数据包时,该函数先判断进程上下文是不是在使用这个sock,如果这个sock没用被使用,则通过tcp_prequeue函数来处理。
在tcp_prequeue里面,有个条件说如果tp->ucopy.task为空则不放到prequeue队列里面。
我的理解是:既然前面已经判断没有用户进程在使用这个sock,不就说明没有进程在读取数据,即tp->ucopy.task为空吗?这样的话无论如何skb也不会放到preque里面了。
请问我这样理解哪里不对啊?不知道sk_lock.owned=0与tp->ucopy.task=null有什么区别?


tp->ucopy.task 与 sock_owned_by_sock没有必然的联系

例如:

tcp_recvmsg -> install ucopy reader -> no data so call sk_wait_data() -> set task to TASK_INTERRUPTIBLE -> sk_wait_event -> release_sock-->__release_sock

This time, packet in!

这个时候就是,tcp_v4_rcv-->满足!sk_owned_by_user并且tp->ucopy.task!= null

   

论坛徽章:
0
3 [报告]
发表于 2014-02-12 21:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP