Linux UDP server bind IP 不能接收广播数据
sliai 2016-02-02 04:41:32 最近在写一个简单的udp server, 发现一个很奇怪的问题。
Bind本地IP的时候如果设置成INADDR_ANY, 就可以收到包。但是如果设置成本地IP,就收不到包。
配置代码如下:
struct sockaddr_in ser_addr;
.....
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
ser_addr.sin_port = htons(PORT_NUM);
if(-1 == bind(server_socket_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr))) {
perror("bind error");
exit(1);
}
.......
如果将IP改成本地IP:
ser_addr.sin_addr.s_addr = inet_addr(“192.168.1.20”);
则收不到数据包。
另外,本地只有一个以太网卡,地址为:192.168.1.20
发送端的数据为广播包,使用tcpdump工具抓包如下:
IP 192.168.1.5.50005 > 255.255.255.255.50005: UDP, length 1340
难道对于广播包,只能使用INADDR_ANY的IP配置?
请大家指教。