diff --git a/Cargo.lock b/Cargo.lock index f46479a..6b1f96f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1370,7 +1370,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -1544,9 +1544,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libloading" @@ -2517,6 +2517,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "spin" version = "0.9.8" @@ -2709,6 +2719,7 @@ dependencies = [ "rfd", "serde", "serde_json", + "socket2 0.6.3", "str0m", "strum", "stun_codec", @@ -2816,7 +2827,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.52.0", ] @@ -3329,7 +3340,7 @@ dependencies = [ "windows-collections", "windows-core 0.61.0", "windows-future", - "windows-link", + "windows-link 0.1.1", "windows-numerics", ] @@ -3363,7 +3374,7 @@ checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ "windows-implement 0.60.0", "windows-interface 0.59.1", - "windows-link", + "windows-link 0.1.1", "windows-result 0.3.2", "windows-strings 0.4.0", ] @@ -3375,7 +3386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32" dependencies = [ "windows-core 0.61.0", - "windows-link", + "windows-link 0.1.1", ] [[package]] @@ -3428,6 +3439,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -3435,7 +3452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.0", - "windows-link", + "windows-link 0.1.1", ] [[package]] @@ -3453,7 +3470,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" dependencies = [ - "windows-link", + "windows-link 0.1.1", ] [[package]] @@ -3483,7 +3500,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" dependencies = [ - "windows-link", + "windows-link 0.1.1", ] [[package]] @@ -3504,6 +3521,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -3541,7 +3567,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" dependencies = [ - "windows-link", + "windows-link 0.1.1", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index cdf9367..b28b593 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ notify-rust = "4.11.7" input-device = { version = "0.1.0", git = "https://github.com/UE2020/input-device.git", branch = "main" } strum = "0.27.1" rfd = "0.15.4" +socket2 = "0.6.3" [patch.crates-io] diff --git a/src/main.rs b/src/main.rs index c92f32e..ec9f5bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -282,7 +282,20 @@ async fn offer( .filter(|(_, addr)| !is_bad_ip(&addr)) .collect::>(); - let socket = UdpSocket::bind("0.0.0.0:0").await?; + let socket = { + let s = socket2::Socket::new( + socket2::Domain::IPV4, + socket2::Type::DGRAM, + Some(socket2::Protocol::UDP), + )?; + let _ = s.set_tos_v4(0x88); // DSCP 34 (AF41): Interactive Video + s.set_nonblocking(true)?; + s.bind(&socket2::SockAddr::from(std::net::SocketAddr::new( + std::net::IpAddr::V4(std::net::Ipv4Addr::new(0, 0, 0, 0)), + 0, + )))?; + UdpSocket::from_std(s.into())? + }; let local_socket_addr = SocketAddr::new(local_ip, socket.local_addr()?.port()); @@ -305,7 +318,21 @@ async fn offer( str0m::net::Protocol::Udp, )?); - let tcp = TcpListener::bind("0.0.0.0:0").await?; + let tcp = { + let s = socket2::Socket::new( + socket2::Domain::IPV4, + socket2::Type::STREAM, + Some(socket2::Protocol::TCP), + )?; + let _ = s.set_tos_v4(0x88); // DSCP 34 (AF41): Interactive Video + s.set_nonblocking(true)?; + s.bind(&socket2::SockAddr::from(std::net::SocketAddr::new( + std::net::IpAddr::V4(std::net::Ipv4Addr::new(0, 0, 0, 0)), + 0, + )))?; + s.listen(128)?; + TcpListener::from_std(s.into())? + }; let tcp_local_socket_addr = SocketAddr::new(local_ip, tcp.local_addr()?.port()); for (_iface, ip) in interfaces.iter() { let local_socket_addr = SocketAddr::new(*ip, tcp.local_addr()?.port()); diff --git a/src/rtc/tcp.rs b/src/rtc/tcp.rs index ca2ea8c..9345d94 100644 --- a/src/rtc/tcp.rs +++ b/src/rtc/tcp.rs @@ -38,6 +38,7 @@ impl Listener { Ok((socket, peer_addr)) = listener.accept() => { info!("Accepted TCP connection from {peer_addr}"); socket.set_nodelay(true).ok(); + let _ = socket2::SockRef::from(&socket).set_tos_v4(0x88); // DSCP 34 (AF41) let (reader, writer) = socket.into_split(); let (close_tx, mut close_rx) = channel(1); map.lock().await.insert(peer_addr, (writer, close_tx));