在Linux下绑定到特定IP的socket无法收到UDP广播包解决办法

在Linux下绑定到特定IP的socket无法收到UDP广播包
我现在在将一个Windows下的工程向Linux下移植,程序包含以下功能:

1.程序需要可以指定一个本机IP通过port 60000发送UDP包,所以我将所有的socket都绑定到了指定的本机IP;
ipv4_addr.sin_family = AF_INET ;
ipv4_addr.sin_port = htons(60000);
ipv4_addr.sin_addr = inet_addr("192.168.1.56");
bind(*socket,(struct sockaddr *)&ipv4_addr, SIZEOF(struct sockaddr_in));

2.程序需要可以通过port 60000接收目的地址为255.255.255.255的UDP封包,我直接使用了刚才的发包socket进行收包.

在Windows下,收发包都可以正常进行.

但是到了Linux下,发包正常,收包失败.我尝试将
ipv4_addr.sin_addr = inet_addr("192.168.1.56");
改为
ipv4_addr.sin_addr.s_addr = INADDR_ANY;

这样就可以正常收包了,那么我奇怪的就是,Linux不会像Windows那样,将广播包映射到这个广播域内的每一个IP吗?
如果我要另外初始化一个绑定到INADDR_ANY的socket进行收包,会影响到程序架构,所以我不大希望这么做,请问一下各位有没有更好的方法,能够在Linux下使用同一个socket进行收发包呢?

------解决方案--------------------
ipv4_addr.sin_addr = inet_addr("192.168.1.56");

ipv4_addr.sin_addr.s_addr ?

粗心了吧




------解决方案--------------------
必须改为
ipv4_addr.sin_addr.s_addr = INADDR_ANY;
这个意思, 是接收网络任各IP

------解决方案--------------------
这个要根据客户端和服务器不同的;
服务器,绑定成any
------解决方案--------------------
探讨

必须改为
ipv4_addr.sin_addr.s_addr = INADDR_ANY;
这个意思, 是接收网络任各IP