连续调用tcpwrite+tcp_output发送后内存溢出
有没有谁使用过lwip连续高速发送啊,我这边板子作为tcp client客户端,需要连续不断往电脑server发送数据,因为需要立即发送,使用的tcpwrite+tcp_output函数,但是连续发送一段时间后就会卡死,开启调试打印后发现内存申请失败。然后我试着降低发送频率后,就可以持续发送了,但是目前能够维持稳定发送的速度只有几十KB。发送部分代码如下
struct pbuf *ptr;
err_t wr_err=ERR_OK;
while((wr_err==ERR_OK)&&es->p&&(es->p->len<=tcp_sndbuf(tpcb)))
{
ptr=es->p;
wr_err=tcp_write(tpcb,ptr->payload,ptr->len,1);
if(wr_err==ERR_OK)
{
es->p=ptr->next;
if(es->p)pbuf_ref(es->p);
pbuf_free(ptr);
}else if(wr_err==ERR_MEM)es->p=ptr;
tcp_output(tpcb);
}
lwip的原始API玩起来太费劲。锁定下发送成功后标志是那个,一定要保证收到服务器应答后再开始新的发送。
页:
[1]