TCP之异常关闭的意义
来源:互联网 发布:go语言高并发网络编程 编辑:程序博客网 时间:2024/05/16 11:21
终止一个连接的正常方式是发送FIN。在发送缓冲区中所有排队数据都已发送之后才发送FIN,正常情况下没有任何数据丢失。
但我们有时也有可能发送一个RST报文段而不是FIN来中途关闭一个连接。这称为异常关闭。
进程关闭socket的默认方式是正常关闭,如果需要异常关闭,利用SO_LINGER选项来控制。
异常关闭一个连接对应用程序来说有两个优点:
(1)丢弃任何待发的已经无意义的数据,并立即发送RST报文段;
(2)RST的接收方利用关闭方式来区分另一端执行的是异常关闭还是正常关闭。
值得注意的是RST报文段不会导致另一端产生任何响应,另一端根本不进行确认。收到RST的一方将终止该连接。程序行为如下:
阻塞模型下,内核无法主动通知应用层出错,只有应用层主动调用read()或者write()这样的IO系统调用时,内核才会利用出错来通知应用层对端RST。
非阻塞模型下,select或者epoll会返回sockfd可读,应用层对其进行读取时,read()会报错RST。
haproxy的实现中用到了这个选项。
0 0
- TCP之异常关闭的意义
- TCP/IP详解--TCP中异常关闭连接的意义 异常关闭的情况
- TCP/IP详解--TCP中异常关闭连接的意义 异常关闭的情况
- 唯快不破:TCP/IP详解--TCP中异常关闭连接的意义 异常关闭的情况
- TCP异常关闭之总结
- TCP socket异常关闭总结
- TCP异常关闭研究分析
- TCP选项之SO_LINGER的作用与意义
- TCP选项之TCP_CORK和TCP_NODELAY的作用和意义
- MFC之解决关闭异常的处理
- TCP/IP 属性的意义
- TCP time_wait 的存在意义
- 网络基础 服务器关闭与TCP异常
- TCP连接的关闭
- tcp的关闭过程
- TCP连接的关闭
- TCP 异常关闭引发的一系列问题研究与分析 from Tencent Technology Community
- TCP新手误区--心跳的意义
- 设计模式---命令模式(C++实现)
- 畅游无限游戏盒子(四)--五子棋
- Hive修改表语句
- 大数据平台搭建之HBase
- 未来30年,程序员的华丽转身
- TCP之异常关闭的意义
- 单例模式2
- 高级(复杂)指针的含义
- 如何自己做Zabbix数据导出功能(上)
- ReactNative 开源项目 --仿优购商城
- BZOJ 2555: SubString 动态树+后缀自动机
- Linux系统安装 OpenSSL两种方法
- TCP选项之SO_LINGER
- 获取数据库中的表以及数据条数