tcp的close与shutdown的区别引发的血案
来源:互联网 发布:矩阵a与b相似 编辑:程序博客网 时间:2024/03/28 18:28
之前写的一个程序需要与flash进行通信,根据flash关于policy-request-file的描述,服务器端甚至不需要读到<policy-file-request>这个请求,只需要返回一个crossdomain的协议,然后再把连接关闭。于是我的程序也这么写了,但是flash端就是说读不到数据,连接被拒绝。查了半天问题,抓包对比之后,发现
client->三次握手->server
cleint-><policy-file-request>->server
server->crossdomain->client
server->reset->client
根据reset的描述,这个时候client的所有资源被释放,因此也可能没有crossdomain的数据了。与之前一个可以运行的抓包对比发现差异发生在了server->crossdomain->client之后
client->fin->server
server->fin_ack->client
也就说是client主动关闭的连接,于是我也写成等待client主动关闭连接,果然Ok了,可是问题虽然解决了,但是原因还是没搞清楚。
后来在2w同学的帮助下,发现tcp协议有一段这样的描述:
Consider two peers, A and B, communicating via TCP. If B closes a socket and there is any data in B’s receive
queue, B sends a TCP RST to A instead of following the standard TCP closing protocol, resulting in an error return
value from recv( ).
而shutdown是没有问题,所以最终代码改成了在写完crossdomain之后,显式shutdown。至此真相大白了,看来一些tcp连接底层的东西还是得了解一下,否则一些边界问题还真不知道怎么查原因。
- tcp的close与shutdown的区别引发的血案
- close与shutdown的区别
- shutdown 与 close 的区别
- Shutdown、Close的区别
- 关于close与shutdown的区别
- 关于close与shutdown的区别
- socket :shutdown 与 close 函数 的区别
- linux中close与shutdown的区别
- shutdown 与 close 函数 的区别
- shutdown 与 close 函数 的区别
- 一个由session.close()引发的血案
- shutdown和close的区别
- shutdown和close的区别
- shutdown和close的区别
- shutdown和close的区别
- close和shutdown的区别
- close和shutdown的区别
- TCP编程中的shutdown和close的区别
- 遍历对象
- k__BackingField与反编译
- k__BackingField与反编译
- 更改csdn账号
- [转]程序员:增加编程经验的3种途径
- tcp的close与shutdown的区别引发的血案
- PRTX P2P文件传输控件、组件功能说明
- rev
- 新的一周,打开一本新书—敏捷开发的艺术(Agile Development)
- Microsoft SQL Server 2000 Driver for JDBC在MyEclipse中的使用方法
- 搭建开发平台Eclipse
- Cunit简介
- 调和级数常数项的存在实验
- 范例框架开发方法——快速高效地进行Java Web应用开发