网络编程释疑之:TCP半开连接的处理

  • 时间:
  • 浏览:3

《Linux多守护tcp连接服务端编程》

本文转自永远的让当村里人 博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/12009358如需转载请自行联系原作者

没关系,嘴笨 让当村里人 都要能在应用层模拟SO_KEEPALIVE的法律法律法律依据,用心跳包来模拟保活探测分节。原因服务器通常要承担成千上万的并发连接,什么都肯定是由客户端在应用层进行心跳来模拟保活探测分节,客户端多次收都要能 服务器的响应时可终止此TCP连接,而服务端可监测客户端的心跳包,若在一定时间间隔内未收到任何来自客户端的心跳包则都要能终止此TCP连接,另一另2个都是效防止了TCP半开连接的情况报告。

熟悉基于TCP协议进行linux高性能、高并发服务端编程的让当村里人 肯定应该知道每个文件描述符及其所占的资源对并发量的影响。在这个 7*24甚至*365不间断运行的服务器上,另2个描述符被浪费,另2个被浪费...原因被浪费的多了,那还何谈高并发,高性能。除去文件描述被正常占用的情况报告外,是什么原因了让当村里人 可用的文件描述符那么少呢?

《UNIX网络编程:卷1》

yaocoder

参考书籍:

嘴笨 ,这个 选项嘴笨 都要能防止让当村里人 前面遇到的TCP半开连接的什么的大问题,只要默认两小时间隔探测的实时性是都是差了些呢?当然,让当村里人 都要能通过修改内核参数改小时间间隔,完美了吧?只要都要注意的是大多数内核是基于整个内核维护什么时间参数的,而都是基于每个套接字维护的,只要原因把无活动周期从两小时改为(比如)2分钟,那将影响到该主机上所有开启了此选项的套接字。我不要 要让当村里人 都是会我不要 承担服务器端的这个 不确定性吧。另外,心跳除了说明应用守护tcp连接还活着(守护tcp连接占据 ,网络畅通),更重要的是表明应用守护tcp连接能正常工作。而SO_KEEPALIVE由操作系统负责探查,即便是守护tcp连接死锁或有一点异常,操作系统也会正常收发TCP keepalive消息,而对方无法得知这个 异常。

熟悉套接字通用选项的让当村里人 一定原因有了想法。TCP套接字都是有个保持存活选项SO_KEEPALIVE嘛,原因在另2个小时之内在该套接字的任何另2个方向上都没数据交换,TCP就自动给对端发送另2个保持存活探测分节,原因此TCP探测分节的响应为RST,说明对端原因崩溃且原因重新启动,该套接字的待防止错误被置为ECONNRESET,套接字两种则被关闭。原因那么对此TCP探测分节的任何响应,该套接字的防止错误就被置为ETIMEOUT,套接字两种则被关闭。

怎么才能 才能 防止?

当客户端与服务器建立起正常的TCP连接后,原因客户主机掉线(网线断开)、电源掉电、或系统崩溃,服务器守护tcp连接将永远我不要 知道(通过让当村里人 常用的select,epoll监测都要能 断开或错误事件),原因不主动防止或重启系统励志的话 对于服务端来说会一个劲维持着这个 连接,任凭服务端守护tcp连接怎么才能 才能 望穿秋水,也永远再等都要能 客户端的任何提前大选。这个 情况报告而是我半开连接,浪费了服务器端可用的文件描述符。

什么是半开连接?