UDP数据包的发送是通过sendto()发起的(其他接口类似),整体实现流
程如下:
(1) 通过文件描述符fd获取文件结构,并提取lwipfd。再通过lwipfd从socket表中获取socket结构。Socket结构中包含了此udp链接中的connect信息;
(2) 使用netbuf_alloc(),创建netbuf结构,这其中包含了pbuf结构。向这个结构导入需要发送的数据;
(3) Netbuf结构最终会传入udp_send()或udp_sendto(),这其中会通过ip_route()确定最终需要发送的网卡结构netif;
(4) Udp_sendto_if_src()添加udp包头;
(5) If_output_if_src()添加IP包头;
(6) 根据网卡结构netif获取发送接口netdev_netif_linkoutput(),最终调用网卡发送函数dm9000_transmit();
发送流程图如下: