static SocketAddress broadcast(const std::string& service)
{
- return SocketAddress(service, "255.255.255.255", SOCK_DGRAM);
+ std::istringstream stream(service);
+ unsigned short port;
+ stream >> port;
+
+ struct sockaddr_in addr;
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+ addr.sin_addr.s_addr = INADDR_BROADCAST;
+ memset(&addr.sin_zero, 0, sizeof(addr.sin_zero));
+ return SocketAddress((sockaddr*)&addr, sizeof(addr), SOCK_DGRAM);
}
service.length() > 0 ? service.c_str() : 0, &hints, &list);
if (status == 0)
{
- struct addrinfo* addr = list;
- while (addr != 0)
+ for (struct addrinfo* addr = list;
+ addr != 0; addr = addr->ai_next)
{
resolved.push_back(SocketAddress(addr, name));
- addr = addr->ai_next;
}
freeaddrinfo(list);
else
{
Mf::logWarning(gai_strerror(status));
+ return -1;
}
return 0;