SO_REUSEADDR on upnp socket
This commit is contained in:
parent
13414428b9
commit
aae78b57c7
3 changed files with 12 additions and 2 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -3609,6 +3609,7 @@ dependencies = [
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"quick-xml",
|
"quick-xml",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
"socket2",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tower-http",
|
"tower-http",
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ url = "2.5.2"
|
||||||
parking_lot = "0.12.3"
|
parking_lot = "0.12.3"
|
||||||
tokio-util = "0.7.11"
|
tokio-util = "0.7.11"
|
||||||
reqwest = { version = "0.12.7", default-features = false }
|
reqwest = { version = "0.12.7", default-features = false }
|
||||||
|
socket2 = "0.5.7"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.18"
|
||||||
|
|
|
||||||
|
|
@ -108,12 +108,20 @@ pub struct SsdpRunner {
|
||||||
impl SsdpRunner {
|
impl SsdpRunner {
|
||||||
pub async fn new(opts: SsdpRunnerOptions) -> anyhow::Result<Self> {
|
pub async fn new(opts: SsdpRunnerOptions) -> anyhow::Result<Self> {
|
||||||
let bind_addr = SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, UPNP_PORT);
|
let bind_addr = SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, UPNP_PORT);
|
||||||
|
let sock = socket2::Socket::new(socket2::Domain::IPV4, socket2::Type::DGRAM, None)
|
||||||
|
.context("error creating socket")?;
|
||||||
|
sock.set_reuse_port(true)
|
||||||
|
.context("error setting SO_REUSEPORT")?;
|
||||||
|
|
||||||
trace!(addr=?bind_addr, "binding UDP");
|
trace!(addr=?bind_addr, "binding UDP");
|
||||||
let socket = tokio::net::UdpSocket::bind(bind_addr)
|
sock.bind(&bind_addr.into())
|
||||||
.await
|
|
||||||
.context(bind_addr)
|
.context(bind_addr)
|
||||||
.context("error binding")?;
|
.context("error binding")?;
|
||||||
|
|
||||||
|
sock.set_nonblocking(true)?;
|
||||||
|
let socket = tokio::net::UdpSocket::from_std(sock.into())
|
||||||
|
.context("error converting socket2 socket to tokio")?;
|
||||||
|
|
||||||
trace!(multiaddr=?UPNP_BROADCAST_IP, interface=?Ipv4Addr::UNSPECIFIED, "joining multicast v4 group");
|
trace!(multiaddr=?UPNP_BROADCAST_IP, interface=?Ipv4Addr::UNSPECIFIED, "joining multicast v4 group");
|
||||||
socket
|
socket
|
||||||
.join_multicast_v4(UPNP_BROADCAST_IP, Ipv4Addr::UNSPECIFIED)
|
.join_multicast_v4(UPNP_BROADCAST_IP, Ipv4Addr::UNSPECIFIED)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue