lwip中的udp_pcb是什么
时间: 2024-05-05 07:20:42 浏览: 218
在lwIP中,udp_pcb代表UDP协议控制块。它是用于管理UDP协议的数据结构,其中包含了UDP协议的各种参数、状态和回调函数等信息。udp_pcb结构体定义在lwip/udp.h头文件中,它的定义如下:
```c
struct udp_pcb {
/* 下一个udp_pcb结构体 */
struct udp_pcb *next;
/* 本地IP地址 */
ip_addr_t local_ip;
/* 本地端口号 */
u16_t local_port;
/* 回调函数 */
udp_recv_fn recv;
/* 用户数据指针 */
void *recv_arg;
/* 远程IP地址 */
ip_addr_t remote_ip;
/* 远程端口号 */
u16_t remote_port;
/* 发送队列 */
struct pbuf *p;
/* 发送IP地址 */
ip_addr_t *local_ip_ptr;
/* 发送端口 */
u16_t local_port_tmp;
/* 发送回调函数 */
udp_send_fn send;
/* 发送用户数据指针 */
void *send_arg;
/* 接收的数据包数量 */
u16_t recv_cnt;
/* 发送的数据包数量 */
u16_t sent_cnt;
/* 错误计数器 */
u8_t err_cnt;
/* 记录最后一次错误的时间 */
u32_t last_err;
/* 记录最后一次接收到数据包的时间 */
u32_t rcv_tmr;
/* 记录最后一次发送数据包的时间 */
u32_t last_send;
/* 记录最后一次接收到ACK的时间 */
u32_t last_ack;
/* 记录最后一次重传数据包的时间 */
u32_t tmr;
/* 重传计时器 */
u16_t rto;
/* 延迟ACK计时器 */
u16_t ack_delay;
/* 最大重传次数 */
u8_t max_cnt;
/* 状态 */
u8_t state;
/* 用于连接时的握手数据 */
struct udp_pcb *next_in_seq;
/* 用于连接时的握手数据 */
u32_t rcv_nxt;
/* 用于连接时的握手数据 */
u32_t rcv_wnd;
/* 用于连接时的握手数据 */
u32_t snd_nxt;
/* 用于连接时的握手数据 */
u32_t snd_wnd;
/* 用于连接时的握手数据 */
u32_t snd_wl1;
/* 用于连接时的握手数据 */
u32_t snd_wl2;
/* 用于连接时的握手数据 */
u32_t lastack;
/* 用于连接时的握手数据 */
u32_t cwnd;
/* 用于连接时的握手数据 */
u32_t ssthresh;
/* 用于连接时的握手数据 */
u16_t mss;
/* 用于连接时的握手数据 */
u16_t remote_mss;
/* 用于连接时的握手数据 */
u16_t sv;
/* 用于连接时的握手数据 */
u16_t rsv;
/* 用于连接时的握手数据 */
u16_t rsv2;
/* 用于连接时的握手数据 */
struct tcp_pcb *tcp;
};
```
udp_pcb结构体中的各个成员变量用于保存UDP协议的相关信息,其中最重要的是recv回调函数和send回调函数,它们分别用于接收和发送UDP数据包。当接收到UDP数据包时,lwIP会调用udp_pcb中的recv回调函数来处理数据包,而当发送UDP数据包时,lwIP会调用udp_pcb中的send回调函数将数据包发送出去。
阅读全文