lwip tcp 收发分片处理

1,发端:

1)会按照设置的最大segment对于应用层下发的数据包进行分片;

最大segment长度:u16_t mss;   /* maximum segment size */

2)分片操作: do_writemore中的tcp_write(循环组装segment): 

while (pos < len) {


2,收端:

只需要按照segment接收处理即可,不需要考虑segment是否来自不同的分组。

1)底层通过INPKT Msg来触发TCP_input接口函数,会调用tcp的recv函数:

       TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); 这个事件会调用recv_tcp,将收到的segment post到conn->recvmbox中去:

sys_mbox_trypost(&conn->recvmbox, p)


2)当上层调用了recv函数(例如netconn->recv)时,会触发netconn_recv_data,其中包括在conn->recvmbox上取data的操作:

   sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0);

你可能感兴趣的:(C++,KM)