23 lines
625 B
Rust
23 lines
625 B
Rust
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::<Vec<_>>();
|
|
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(())
|
|
}
|