refactor(net): 重构TCP listening backlog为动态扩展
-
refactor(Listening): 使用队列维护inners
-
debug(Listening): fix inners没有正确扩展
-
refactor(poll): 多包一并notify改为单包notify
-
feat: 增加单元测试
多包一并notify改为单包notify
为什么要这样做
and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?
and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?
当前tcp listening backlog的实现会在执行系统调用sys_listen后创建backlog个socket等待连接,这样即便处于空闲状态下依旧占用固定内存,且占用大小取决于用户程序指定的backlog大小。这个PR用队列来维护socket,将完成tcp三次握手的socket push到队列,调用accept从队列pop出socket,从而让队列大小随着并发连接数和客户端处理能力的变化而变化
多包一并notify改为单包notify
为什么要这样做
smoltcp没有提供listen接口,不能在连接到来时自动创建新的socket,所以现在的实现是总是绑定连接数+1个smoltcp socket,单包处理就可以在update_io_event中bind新的socket供下一次连接
and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?
dragonos运行test_backlogc
使用外部tcp连接脚本,并发数:5,连接数:20
这个实现我初看了一下,怎么感觉容易在poll的地方卡很久?如果一直有包到来的话。
@sparkzky @Samuka007 麻烦帮忙review一下?