网络收发报文缓冲区预留前缀后缀空间的最佳实践

前言

无论在C语言编程中,还是在C++编程的底层网络编程中,经常会进行网络收发操作,而且很有可能会对这些报文会进行扩展或封装,那么在收发缓冲buffer的前后增加多余的空间,将是非常有利的,这样可以避免对网络报文的反复拷贝。

此网络收发报文缓冲区预留前缀、后缀空间的最佳实践,在VPP等高性能处理程序中经常可见,在此将其介绍过来 :)

抽象伪码

----------------------------------------------------------------------
  ... prefix space  | | | | | | | | | | suffix space ...           
----------------------------------------------------------------------
^                   ^                 ^                              ^
|                   |                 |                              |
base                rd_ptr            wr_ptr                         capacity
  unsigned char base[MORE_BIGGER_THAN_PKT_SIZE];
  // reserve prefix space
  rd_ptr = wr_ptr = prefix_offset;
  ...
     
  nsize = sock_recv(base + wr_ptr, capacity - prefix_offset);
  wr_ptr += nsize;
  
  rd_ptr -= sizeof(extended_prefix_info);
  add_some_extended_prefix_info(base + rd_ptr);
  
  
  add_some_extended_suffix_info(base + wr_ptr);
  wr_ptr += sizeof(extended_suffix_info);
  
  // so can avoid the memory copy if adding extended info
  sock_send(base + rd_ptr, wr_ptr - rd_ptr);

通过预留编解码缓冲区前后缀空间,可以在收发外部网络报文后,再次封装或加入扩展时,避免内存拷贝

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值