近期在使用lwIP协议,使用其原生接口netconn接口进行UDP通信时,意外发现,尽然无法接收来自广播的消息,在经过一番查找资料中,发现平常大家在使用中,更多的选择是socket接口,导致关于netconn接口的资料少之又少,经过各种尝试无果,只能,在lwIP源码中查找是哪里引起的错误,最后发现是lwIP中的udp.c文件中的void udp_input(struct pbuf *p, struct netif *inp)函数中的下列语句导致无法接收广播信息:
#if IP_SOF_BROADCAST_RECV
(broadcast && ip_get_option(pcb, SOF_BROADCAST) &&
(ip_addr_isany(&pcb->local_ip) ||
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
#else /* IP_SOF_BROADCAST_RECV */
(broadcast &&
(ip_addr_isany(&pcb->local_ip) ||
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
#endif /* IP_SOF_BROADCAST_RECV */
在IP_SOF_BROADCAST_RECV为1的情况下,需要进