cherrypicked from b6a8590c34 its v6 its better

This commit is contained in:
lda
2025-08-31 17:47:06 +07:00 Unverified
parent cc7f8013ad
commit 68377dcae7
2 changed files with 9 additions and 2 deletions
+5 -1
View File
@@ -7,9 +7,11 @@ use crate::route::api::Status; */
use crate::utils::parse::mac::{des_opm, ser_opm}; use crate::utils::parse::mac::{des_opm, ser_opm};
use crate::utils::wake::wake_one; use crate::utils::wake::wake_one;
use axum::{extract::Json, http::StatusCode, response::IntoResponse}; use axum::{extract::Json, http::StatusCode, response::IntoResponse};
use futures::TryFutureExt;
use macaddr::MacAddr; use macaddr::MacAddr;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none; use serde_with::skip_serializing_none;
use tokio::net::UdpSocket;
#[skip_serializing_none] #[skip_serializing_none]
#[derive(Debug, Default, Serialize, Clone)] #[derive(Debug, Default, Serialize, Clone)]
@@ -75,7 +77,9 @@ pub async fn wake_multi(Json(req): Json<Vec<WakeTarget>>) -> impl IntoResponse {
pub async fn wake_multi_split( pub async fn wake_multi_split(
targets: impl IntoIterator<Item = WakeTarget>, targets: impl IntoIterator<Item = WakeTarget>,
) -> io::Result<Vec<WakeTargetResult>> { ) -> io::Result<Vec<WakeTargetResult>> {
let sock = tokio::net::UdpSocket::bind("0.0.0.0:0").await?; let sock = UdpSocket::bind("[::]:0")
.or_else(|_| UdpSocket::bind(":0"))
.await?;
sock.set_broadcast(true)?; sock.set_broadcast(true)?;
Ok( Ok(
+4 -1
View File
@@ -1,6 +1,7 @@
pub mod impls; pub mod impls;
use std::{io, net::IpAddr}; use std::{io, net::IpAddr};
use futures::TryFutureExt;
use macaddr::MacAddr; use macaddr::MacAddr;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
@@ -74,7 +75,9 @@ impl WakeTargetResult {
pub async fn _wake_multi( pub async fn _wake_multi(
targets: impl IntoIterator<Item = WakeTarget>, targets: impl IntoIterator<Item = WakeTarget>,
) -> io::Result<Vec<WakeTargetResult>> { ) -> io::Result<Vec<WakeTargetResult>> {
let sock = UdpSocket::bind(":0").await?; let sock = UdpSocket::bind("[::]:0")
.or_else(|_| UdpSocket::bind(":0"))
.await?;
sock.set_broadcast(true)?; sock.set_broadcast(true)?;
let fs = targets.into_iter().map(|t| wake_one(&sock, t)); let fs = targets.into_iter().map(|t| wake_one(&sock, t));
Ok(futures::future::join_all(fs).await) Ok(futures::future::join_all(fs).await)