tcp代理实验性零拷贝TCP代理

使用方法:


$ make  

$ ./bin/tcp-proxy  

例如


$ ./bin/tcp-proxy 本地主机:8080 本地主机:8000  

实现提示

  • 默认启动 nproc 线程,每个线程运行独立的事件循环(libev

  • 每个事件循环接受连接(通过SO_REUSEPORT创建的套接字)

  • 连接接受过程为 malloc-free(偶尔可能重新分配)

  • 使用 splice() 在下游与上游之间通信实现高效传输

进一步可能的改进/调整

  • 套接字读取中的退避策略

  • pthread CPU/内存亲和性优化

  • IRQ和接口队列处理添加亲和性

  • 增加对SO_LINGER的支持,以减少与上游断开后的 TIME_WAIT 状态的套接字数量