From 00513209ad31b1de2a54c0befbcc0787ed736ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Tue, 7 Apr 2020 14:18:37 +0200 Subject: [PATCH] aquatic: move socket creation into run_event_loop function --- aquatic/src/lib/lib.rs | 3 +- aquatic/src/lib/network.rs | 63 +++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/aquatic/src/lib/lib.rs b/aquatic/src/lib/lib.rs index 4ab54ae..4c5132b 100644 --- a/aquatic/src/lib/lib.rs +++ b/aquatic/src/lib/lib.rs @@ -16,12 +16,11 @@ pub fn run(){ let state = State::new(); for i in 0..config.num_threads { - let socket = network::create_socket(&config); let state = state.clone(); let config = config.clone(); ::std::thread::spawn(move || { - network::run_event_loop(state, config, socket, i); + network::run_event_loop(state, config, i); }); } diff --git a/aquatic/src/lib/network.rs b/aquatic/src/lib/network.rs index 5ecc495..cfb2757 100644 --- a/aquatic/src/lib/network.rs +++ b/aquatic/src/lib/network.rs @@ -15,45 +15,14 @@ use crate::config::Config; use crate::handlers::*; -pub fn create_socket(config: &Config) -> ::std::net::UdpSocket { - let mut builder = &{ - if config.address.is_ipv4(){ - UdpBuilder::new_v4().expect("socket: build") - } else { - UdpBuilder::new_v6().expect("socket: build") - } - }; - - builder = builder.reuse_port(true) - .expect("socket: set reuse port"); - - let socket = builder.bind(&config.address) - .expect(&format!("socket: bind to {}", &config.address)); - - socket.set_nonblocking(true) - .expect("socket: set nonblocking"); - - if let Err(err) = socket.set_recv_buffer_size(config.recv_buffer_size){ - eprintln!( - "socket: failed setting recv buffer to {}: {:?}", - config.recv_buffer_size, - err - ); - } - - socket -} - - pub fn run_event_loop( state: State, config: Config, - socket: ::std::net::UdpSocket, token_num: usize, ){ let mut buffer = [0u8; MAX_PACKET_SIZE]; - let mut socket = UdpSocket::from_std(socket); + let mut socket = UdpSocket::from_std(create_socket(&config)); let mut poll = Poll::new().expect("create poll"); let interests = Interest::READABLE; @@ -99,6 +68,36 @@ pub fn run_event_loop( } +fn create_socket(config: &Config) -> ::std::net::UdpSocket { + let mut builder = &{ + if config.address.is_ipv4(){ + UdpBuilder::new_v4().expect("socket: build") + } else { + UdpBuilder::new_v6().expect("socket: build") + } + }; + + builder = builder.reuse_port(true) + .expect("socket: set reuse port"); + + let socket = builder.bind(&config.address) + .expect(&format!("socket: bind to {}", &config.address)); + + socket.set_nonblocking(true) + .expect("socket: set nonblocking"); + + if let Err(err) = socket.set_recv_buffer_size(config.recv_buffer_size){ + eprintln!( + "socket: failed setting recv buffer to {}: {:?}", + config.recv_buffer_size, + err + ); + } + + socket +} + + /// Read requests, generate and send back responses fn handle_readable_socket( state: &State,