Chinaunix

标题: 如何读到rst [打印本页]

作者: wishel    时间: 2009-11-03 15:40
标题: 如何读到rst
读fin的话,读到0字节,且返回成功就可以了。

rst是怎么读的,通过带外数据?
作者: naihe2010    时间: 2009-11-03 15:58
你如果处理TCP层,不会关系到fin或者rst等包。
如果处理IP层,才所有包都处理。
作者: wishel    时间: 2009-11-03 16:32
原帖由 naihe2010 于 2009-11-3 15:58 发表
你如果处理TCP层,不会关系到fin或者rst等包。
如果处理IP层,才所有包都处理。


你在说什么呢?
fin和rst不是tcp层的?
作者: naihe2010    时间: 2009-11-03 17:35
标题: 回复 #3 wishel 的帖子
就是因为fin和rst是TCP层的,所以系统的TCP协议栈就处理它了。你做上层应用的,根本接触不到它。
我前面也说了,除非你要自己做TCP协议栈的事情,那你就创建IP层的套接字。这样,TCP协议栈就不会“太多”理它了。
“太多”的意思,表示系统的协议栈还是会做一点儿手脚的。
作者: naihe2010    时间: 2009-11-03 17:36
标题: 回复 #1 wishel 的帖子
另外,读到0,也不表示读到了fin。它只是系统协议栈告诉你,下层的socket关闭了。
作者: peidright    时间: 2009-11-03 17:42
。。。我曾经用一个发包的库,一个个包的构造,发送。。。试图于BGP建立连接。
由于没有在本地监听,向内核注册协议栈,结果对方返回一个包之后,内核马上会发送个RST包。。。。
太傻了
作者: wishel    时间: 2009-11-04 16:57
原帖由 naihe2010 于 2009-11-3 17:36 发表
另外,读到0,也不表示读到了fin。它只是系统协议栈告诉你,下层的socket关闭了。


好吧,我不想纠缠具体术语。
我只想知道,我在tcp 层,怎样在read的时候知道对方发了 rst

对方发fin可以知道。
write的时候对方rst也可以知道。(SIGPIPE)
作者: errno    时间: 2009-11-04 17:14
你应该进入了一个误区。
当你用write,read的时候,你工作在sock上,并不是tcp上。
你要接管tcp包的处理,一种是内核编程,patch socket套接字的处理,
具体我也不知道怎么做了。可以查查man read ,man socket,看看有没有什么特别的返回标志。

不明白为什么需要处理RST包这种情况? 或者可以了解下这个libnet这个库。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2