mirror of
https://github.com/dndx/phantun.git
synced 2025-01-31 20:29:31 +08:00
23 lines
699 B
Rust
23 lines
699 B
Rust
|
use std::net::SocketAddr;
|
||
|
use tokio::net::UdpSocket;
|
||
|
|
||
|
pub fn new_udp_reuseport(local_addr: SocketAddr) -> UdpSocket {
|
||
|
let udp_sock = socket2::Socket::new(
|
||
|
if local_addr.is_ipv4() {
|
||
|
socket2::Domain::IPV4
|
||
|
} else {
|
||
|
socket2::Domain::IPV6
|
||
|
},
|
||
|
socket2::Type::DGRAM,
|
||
|
None,
|
||
|
)
|
||
|
.unwrap();
|
||
|
udp_sock.set_reuse_port(true).unwrap();
|
||
|
// from tokio-rs/mio/blob/master/src/sys/unix/net.rs
|
||
|
udp_sock.set_cloexec(true).unwrap();
|
||
|
udp_sock.set_nonblocking(true).unwrap();
|
||
|
udp_sock.bind(&socket2::SockAddr::from(local_addr)).unwrap();
|
||
|
let udp_sock: std::net::UdpSocket = udp_sock.into();
|
||
|
udp_sock.try_into().unwrap()
|
||
|
}
|