mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-02 10:45:30 +00:00
aquatic: move socket creation into run_event_loop function
This commit is contained in:
parent
40583b32a3
commit
00513209ad
2 changed files with 32 additions and 34 deletions
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue