X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSocket.hh;h=9690a2e892df42cdc59257ec270083d9f8cb98d3;hp=f1604663b038c37ff408061ca50db4d914ccd38a;hb=26095329ef78e94929ad7ab14480dc1a0edecff8;hpb=1a9061caa8fe73b4b34a37fe467e145bba7bd2f5 diff --git a/src/Moof/Socket.hh b/src/Moof/Socket.hh index f160466..9690a2e 100644 --- a/src/Moof/Socket.hh +++ b/src/Moof/Socket.hh @@ -90,7 +90,16 @@ public: 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); } @@ -193,11 +202,10 @@ public: 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); @@ -205,6 +213,7 @@ public: else { Mf::logWarning(gai_strerror(status)); + return -1; } return 0;