Init
This commit is contained in:
@@ -6,6 +6,7 @@ use std::io;
|
||||
use tokio::net::UdpSocket;
|
||||
use parking_lot::RwLock;
|
||||
use tokio::task;
|
||||
use crate::utils::toolbox::number_of_cpus;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct UDPServer {
|
||||
@@ -44,7 +45,7 @@ impl UDPServer {
|
||||
|
||||
let mut workers = Vec::new();
|
||||
|
||||
for id in available_parallelism() {
|
||||
for id in 0..number_of_cpus() {
|
||||
let bind_addr = self.bind_addr.clone();
|
||||
|
||||
let domain = match bind_addr {
|
||||
@@ -60,6 +61,7 @@ impl UDPServer {
|
||||
let std_sock = std::net::UdpSocket::from(sock);
|
||||
std_sock.set_nonblocking(true)?;
|
||||
let udp = UdpSocket::from_std(std_sock)?;
|
||||
let udp = Arc::new(udp);
|
||||
|
||||
let buffer_size = 1500;
|
||||
let worker = task::spawn(async move {
|
||||
@@ -81,13 +83,14 @@ impl UDPServer {
|
||||
async fn run_windows(&self) -> io::Result<()> {
|
||||
let udp = UdpSocket::bind(self.bind_addr).await?;
|
||||
let udp = Arc::new(udp);
|
||||
|
||||
|
||||
let mut workers = Vec::with_capacity(self.workers);
|
||||
for id in 0..self.workers {
|
||||
let mut workers = Vec::new();
|
||||
for id in 0..number_of_cpus() {
|
||||
let sock = udp.clone();
|
||||
let buf_size = 1500;
|
||||
let buffer_size = 1500;
|
||||
let worker = task::spawn(async move {
|
||||
if let Err(e) = Self::worker_loop(udp, buffer_size) {
|
||||
if let Err(e) = Self::worker_loop(sock, buffer_size).await {
|
||||
eprintln!("Worker loop error: {}", e);
|
||||
}
|
||||
});
|
||||
@@ -100,7 +103,7 @@ impl UDPServer {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn worker_loop(socket: UdpSocket, buffer_size: usize) -> io::Result<()>{
|
||||
async fn worker_loop(socket: Arc<UdpSocket>, buffer_size: usize) -> io::Result<()>{
|
||||
let mut buffer = vec![0u8; buffer_size];
|
||||
loop {
|
||||
let (size, peer) = socket.recv_from(&mut buffer).await?;
|
||||
|
||||
Reference in New Issue
Block a user