use anyhow::{Context, Result}; use std::net::{Ipv4Addr, UdpSocket}; pub(crate) fn wake(host: [u8; 6]) -> Result<()> { let mut magic_packet = vec![0xffu8; 6]; let mut payload = host .to_vec() .iter() .map(|x| *x) .cycle() .take(16 * 6) .collect::>(); magic_packet.append(&mut payload); let socket = UdpSocket::bind((Ipv4Addr::new(0, 0, 0, 0), 0)).context("")?; socket .set_broadcast(true) .context("Couldn't set socket to broadcasting")?; socket.send_to(&magic_packet[..], (Ipv4Addr::new(255, 255, 255, 255), 9))?; Ok(()) }