免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wishel
打印 上一主题 下一主题

推见2篇linux下高并发开发的文章 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-11-10 22:28 |只看该作者
原帖由 chenzhanyiczy 于 2008-11-10 22:09 发表
这个问题,相信大家都知道能看懂,但为什么在缓冲区还有数据时,close掉程序就不会走正常的关闭流程,这个在文章里没有得到回答,也没有什么官方的说明,只是作者通过实践证明了这一点,没有理论基础


个人理解这可能是作为一种优化实现。
还有数据没有读完就关闭,本身就意味着可能有什么异常发生(比如进程非正常终止)。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
12 [报告]
发表于 2008-11-10 22:52 |只看该作者
这些都是假设,没有建立在任何理论的基础之上,也许只有研究tcp内核代码才能知道了

论坛徽章:
0
13 [报告]
发表于 2008-11-10 22:55 |只看该作者
原帖由 chenzhanyiczy 于 2008-11-10 22:52 发表
这些都是假设,没有建立在任何理论的基础之上,也许只有研究tcp内核代码才能知道了


这跟代码有什么关系?代码只是实现。只要不违反标准,实现可以做任何优化和调整。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
14 [报告]
发表于 2008-11-10 22:58 |只看该作者
你没明白我的意思,我说的是,我们作的这些推论都是建立在假想和实践之上,没有什么理论作基础,tcp具体的实现不是看tcp栈代码,那看什么

论坛徽章:
0
15 [报告]
发表于 2008-11-10 23:07 |只看该作者
原帖由 chenzhanyiczy 于 2008-11-10 22:58 发表
你没明白我的意思,我说的是,我们作的这些推论都是建立在假想和实践之上,没有什么理论作基础,tcp具体的实现不是看tcp栈代码,那看什么


你看了能说明什么?能说明他做对了还是做错了,做得好还是做的不好?
不同的系统都有不同的tcp实现,你能都看完?
即使都看完了,还是那句话,能说明什么?能判断哪个的实现更好,理念更先进,算法更优?都看完了能得到什么理论做基础?

理论,规范,标准是抽象层次的
实现是具体层次的。实现不可能完美,不可能兼顾所有,只有权衡,有所取所舍

论坛徽章:
0
16 [报告]
发表于 2008-11-10 23:13 |只看该作者
也没有什么官方的说明,只是作者通过实践证明了这一点,没有理论基础


说白了
你想要的是理论基础,就是why
但是看具体实现代码,只能看到how,你永远不可能从具体实现里看到why

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
17 [报告]
发表于 2008-11-10 23:14 |只看该作者
朋友,你跑题了

我先问你,为什么在缓冲区还有数据时,close掉程序就不会走正常的关闭流程? 不要拿通过实践证明就是这样的来评论

这个问题要真正搞清除其原因,除了看tcp的实现,请问还有什么办法??

论坛徽章:
0
18 [报告]
发表于 2008-11-10 23:31 |只看该作者
原帖由 chenzhanyiczy 于 2008-11-10 23:14 发表
朋友,你跑题了

我先问你,为什么在缓冲区还有数据时,close掉程序就不会走正常的关闭流程? 不要拿通过实践证明就是这样的来评论

这个问题要真正搞清除其原因,除了看tcp的实现,请问还有什么办法??


难道你要的就是这个层次的原因?呵呵
那我没话说

我上面说的很清楚了,这个是how层次的
为什么结果会是这样?how层次
为什么要设计成结果是这样?why层次

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
19 [报告]
发表于 2008-11-10 23:44 |只看该作者
当然,就是要这个层次的原因

不知道原因,按部就班的话很容易出问题的

论坛徽章:
0
20 [报告]
发表于 2008-11-11 11:56 |只看该作者
查到了rfc1122,
4.2.2.13  Closing a Connection: RFC-793 Section 3.5

A host MAY implement a "half-duplex" TCP close sequence, so that an application that has called CLOSE cannot continue to read data from the connection. If such a host issues a CLOSE call while received data is still pending in TCP, or if new data is received after CLOSE is called, its TCP SHOULD send a RST to show that data was lost.

在linux下测试了下,果然client close后,就不能继续recv了。证明linux implements a "half-duplex" TCP close sequence

[ 本帖最后由 wishel 于 2008-11-11 12:52 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP