大家好,欢迎来到IT知识分享网。
用户使用UDP进行编程,以及内核对UDP报文的处理,本质上都是对UDP控制块的操作。
//用于控制块的flags字段,标识控制块的状态连接
#define UDP_FLAGS_NOCHKSUM 0x01U //不进行校验和的计算
#define UDP_FLAGS_UDPLITE 0x02U
#define UDP_FLAGS_CONNECTED 0x04U //控制块已和远端建立连接
#define UDP_FLAGS_MULTICAST_LOOP 0x08U
//定义回调函数类型
typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p,
ip_addr_t *addr, u16_t port);
//定义控制块结构体
struct udp_pcb {
IP_PCB; //宏IP_PCB中的各个字段
struct udp_pcb *next; //用于将控制块组织成链表的指针
u8_t flags; //控制块状态字段
u16_t local_port, remote_port; //保存本地端口号和远端端口号,使用主机字节序
#if LWIP_IGMP
/** outgoing network interface for multicast packets */
ip_addr_t multicast_ip;
#endif /* LWIP_IGMP */
#if LWIP_UDPLITE
/** used for UDP_LITE only */
u16_t chksum_len_rx, chksum_len_tx;
#endif /* LWIP_UDPLITE */
udp_recv_fn recv; //处理数据时的回调函数
void *recv_arg; //当调用回调函数时,将传递给函数的用户自定义的数据信息
};
IP_PCB宏
#define IP_PCB \
ip_addr_t local_ip; \
ip_addr_t remote_ip; \
u8_t so_options; \ //socket连接
u8_t tos; \ //服务类型
u8_t ttl \ //生存时间
IP_PCB_ADDRHINT
struct ip_pcb {
IP_PCB;
};
被使用最多的是前两个,本地IP,远程IP。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32420.html