设计TCP服务器,采用如下规则:

1.正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被TCP接受(完成三次握手),但还没有被应用层接受。注意:TCP接受一个连接是将其放入这个队列,而应用层接受连接是将其从该队列中移出。也就是使用***.accept()函数来阻塞等待客户的请求。

2.应用层指明该队列的最大长度,这个值被称为“积压值(backlog)”,范围为0~5。也就是使用

3.当一个连接请求到达时,TCP使用一个算法,根据当前连接队列中的连接数来确定是否接收这个连接。这不同于积压值,积压值说明的是TCP监听的端点已被TCP接受而等待应用层接受的最大连接数。这个积压值对系统所允许的最大连接数,或者并发服务器所能并发处理的客户数,并无影响。

4.如果对于新的连接请求,该TCP监听的端点的连接队列中还有空间,TCP模块将对SYN进行确认并完成连接的建立。但应用层只有在三次握手中的第三个报文段收到后才会知道这个新连接。另外,当客户进程的主动打开成功但服务器的应用层还不知道这个新连接时,它可能会认为服务器进程已经准备好接受数据了。此后,如果客户程序发送数据,服务器的TCP模块会将接收的数据放入缓存队列。

5.如果对于新的连接请求,连接队列中已没有空间,TCP将不理会收到的SYN,也不发回任何报文段(包括RST),这是一个软错误,而不是一个硬错误。如果应用层不能及时接受.listen(5)中的连接,达到积压值(5),客户的主动打开最终也将超时。

最新文章

  1. N[开源].NET CORE与MySql更配, MySqlSugar ORM框架 3.x
  2. RxAndroid/java小记
  3. IDEA 编译找不到符号,文件却没有错误。
  4. nginx实现访问网站或目录密码认证保护
  5. (转)用AGG实现高质量图形输出(一)
  6. zoj 3057 博弈
  7. 为什么你写的Python运行的那么慢呢?
  8. Hibernate之管理session与批处理
  9. json对象转字符串与json字符串转对象
  10. DNS:域名系统
  11. 一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法!
  12. 异步获取CMD命令行输出内容
  13. Django之AppConfig源码学习
  14. react_app 项目开发 (7)_难点集合
  15. maven项目部署到Tomcat
  16. Code Pages
  17. 对hadoop namenode -format执行过程的探究
  18. C++泛型编程(2)--通过排序和查找元素理解迭代器
  19. c __cplusplus详解
  20. Android下ListView上下滑动背景变黑

热门文章

  1. LeetCode OJ-- Merge k Sorted Lists *@
  2. Linux安全漏洞审计工具Lynis
  3. Spoj MKTHNUM - K-th Number
  4. codeigniter视图
  5. Shell脚本部分语法
  6. Aliyun-CentOS7.3 Init
  7. zookeeper客户端 和服务器连接时版本问题
  8. apache支持php
  9. vue Object.freeze() 优化
  10. 网络电台(WIZ550io)