LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1174|回复: 10

网络编程(收到RST问题)

[复制链接]
发表于 2006-5-17 22:06:10 | 显示全部楼层 |阅读模式
请问当tcp收到RST分节时,tcp(内核)如何处理这个分节,是不是关闭其套接字?
然后如何通知应用进程呢?
 楼主| 发表于 2006-5-18 11:29:00 | 显示全部楼层
waiting!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-19 11:00:34 | 显示全部楼层
斑竹,给我指导指导。
谢谢!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 10:20:56 | 显示全部楼层
收到RST以后, 内核将socket数据结构的状态置为RESET, 用此socket发送数据会立刻返回-1, 并产生ECONNRESET的错误; 接收数据会立刻返回??(0还是-1我忘了, 我记得应该是0).
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-20 17:13:46 | 显示全部楼层
谢谢!

内核将socket结构的so_error置为RESET,如果写这个套接字,write()返回-1,同时将产生SIGPIPE信号。这是书上说的,我想读才返回ECONNRESET吧。

还是不明白。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-20 19:49:02 | 显示全部楼层
一些有关套接字的错误,是通过read()返回,还是通过write()返回?
也就是说,如果一个套接字有待处理错误,tcp内核是通过read()调用,还是通过write()调用,来设置errno这个全局变量的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-22 15:48:11 | 显示全部楼层
高手进来说说看啊。

谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-23 16:47:03 | 显示全部楼层
waiting
回复 支持 反对

使用道具 举报

发表于 2006-5-23 22:50:10 | 显示全部楼层
TCP socket可以用getsockopt的SO_ERROR来获取, UDP的套接口错误可以设置IP_RECVERR的socket option, 然后用recvmsg MSG_ERRQUEUE 来接收错误, 查看:
man 7 ip
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-25 19:59:52 | 显示全部楼层
大家可否给一个处理出错信息完整一点的代码?

谢谢!

我好学学。
谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表