src/network/network.cpp
changeset 8943 9706d328bb12
parent 8930 361433723616
child 10229 fba3f9fa44d7
equal deleted inserted replaced
8942:7cf2427744ba 8943:9706d328bb12
   402 
   402 
   403 			if (ip != INADDR_LOOPBACK && ip != INADDR_ANY) {
   403 			if (ip != INADDR_LOOPBACK && ip != INADDR_ANY) {
   404 				inaddr.s_addr = htonl(ip | ~netmask);
   404 				inaddr.s_addr = htonl(ip | ~netmask);
   405 				_broadcast_list[i] = inaddr.s_addr;
   405 				_broadcast_list[i] = inaddr.s_addr;
   406 				i++;
   406 				i++;
       
   407 				if (i == MAX_INTERFACES) break;
   407 			}
   408 			}
   408 			if (read < 0) {
   409 			if (read < 0) {
   409 				break;
   410 				break;
   410 			}
   411 			}
   411 			*output += read;
   412 			*output += read;
   429 		if (!(ifa->ifa_flags & IFF_BROADCAST)) continue;
   430 		if (!(ifa->ifa_flags & IFF_BROADCAST)) continue;
   430 		if (ifa->ifa_broadaddr == NULL) continue;
   431 		if (ifa->ifa_broadaddr == NULL) continue;
   431 		if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
   432 		if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
   432 		_broadcast_list[i] = ((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr;
   433 		_broadcast_list[i] = ((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr;
   433 		i++;
   434 		i++;
       
   435 		if (i == MAX_INTERFACES) break;
   434 	}
   436 	}
   435 	freeifaddrs(ifap);
   437 	freeifaddrs(ifap);
   436 
   438 
   437 #else /* not HAVE_GETIFADDRS */
   439 #else /* not HAVE_GETIFADDRS */
   438 	SOCKET sock;
   440 	SOCKET sock;
   468 		 * 255.255.255.255.
   470 		 * 255.255.255.255.
   469 		 */
   471 		 */
   470 		_broadcast_list[i++] =
   472 		_broadcast_list[i++] =
   471 			 ifo[j].iiAddress.AddressIn.sin_addr.s_addr |
   473 			 ifo[j].iiAddress.AddressIn.sin_addr.s_addr |
   472 			~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
   474 			~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
       
   475 		if (i == MAX_INTERFACES) break;
   473 	}
   476 	}
   474 #else
   477 #else
   475 	ifconf.ifc_len = sizeof(buf);
   478 	ifconf.ifc_len = sizeof(buf);
   476 	ifconf.ifc_buf = buf;
   479 	ifconf.ifc_buf = buf;
   477 	if (ioctl(sock, SIOCGIFCONF, &ifconf) == -1) {
   480 	if (ioctl(sock, SIOCGIFCONF, &ifconf) == -1) {
   491 			if (ioctl(sock, SIOCGIFFLAGS, &r) != -1 &&
   494 			if (ioctl(sock, SIOCGIFFLAGS, &r) != -1 &&
   492 					r.ifr_flags & IFF_BROADCAST &&
   495 					r.ifr_flags & IFF_BROADCAST &&
   493 					ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
   496 					ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
   494 				_broadcast_list[i++] =
   497 				_broadcast_list[i++] =
   495 					((struct sockaddr_in*)&r.ifr_broadaddr)->sin_addr.s_addr;
   498 					((struct sockaddr_in*)&r.ifr_broadaddr)->sin_addr.s_addr;
       
   499 				if (i == MAX_INTERFACES) break;
   496 			}
   500 			}
   497 		}
   501 		}
   498 
   502 
   499 		p += sizeof(struct ifreq);
   503 		p += sizeof(struct ifreq);
   500 #if defined(AF_LINK) && !defined(SUNOS)
   504 #if defined(AF_LINK) && !defined(SUNOS)