public string Discover(int attempts = 3) { var packet = new DiscoveryPacket(); var buffer = new byte[1024]; int bytesrecvd = 0; for (var i = 1; i <= attempts && bytesrecvd == 0; i++) { try { Send(packet); bytesrecvd = Receive(buffer); } catch (SocketException e) { if (e.SocketErrorCode != SocketError.TimedOut) { throw e; } if (i == attempts) { throw new TimeoutException($"Discovery timed out after {i} attempts."); } } } var endpoint = ParseLocationData(buffer, bytesrecvd); return(endpoint); }
void Send(DiscoveryPacket packet) { var ssdpEndpoint = new IPEndPoint(IPAddress.Parse(ssdpMcastAddr), ssdpPort); SendTo(packet.ToByteArray(), 0, packet.Length, SocketFlags.None, ssdpEndpoint); }