aquatic: move socket creation into run_event_loop function

This commit is contained in:
Joakim Frostegård 2020-04-07 14:18:37 +02:00
parent 40583b32a3
commit 00513209ad
2 changed files with 32 additions and 34 deletions

View file

@ -16,12 +16,11 @@ pub fn run(){
let state = State::new(); let state = State::new();
for i in 0..config.num_threads { for i in 0..config.num_threads {
let socket = network::create_socket(&config);
let state = state.clone(); let state = state.clone();
let config = config.clone(); let config = config.clone();
::std::thread::spawn(move || { ::std::thread::spawn(move || {
network::run_event_loop(state, config, socket, i); network::run_event_loop(state, config, i);
}); });
} }

View file

@ -15,45 +15,14 @@ use crate::config::Config;
use crate::handlers::*; 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( pub fn run_event_loop(
state: State, state: State,
config: Config, config: Config,
socket: ::std::net::UdpSocket,
token_num: usize, token_num: usize,
){ ){
let mut buffer = [0u8; MAX_PACKET_SIZE]; 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 mut poll = Poll::new().expect("create poll");
let interests = Interest::READABLE; 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 /// Read requests, generate and send back responses
fn handle_readable_socket( fn handle_readable_socket(
state: &State, state: &State,