pub struct MulticastSocket { /* private fields */ }Implementations§
Source§impl MulticastSocket
impl MulticastSocket
Sourcepub fn builder() -> MulticastSocketBuilder
pub fn builder() -> MulticastSocketBuilder
Examples found in repository?
examples/simple_receiver.rs (line 8)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Listens on a multicast group until interrupted.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 46053)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 10)))
11 .build()
12 .await?;
13
14 let mut buf = [0_u8; 2048];
15 loop {
16 let (n, from) = socket.recv_from(&mut buf).await?;
17 println!("received {n} bytes from {from}");
18 }
19}More examples
examples/simple_sender.rs (line 8)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Sends a single datagram to the same group used by simple_receiver.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 46054)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 10)))
11 .build()
12 .await?;
13
14 socket
15 .send_to(
16 b"hello multicast",
17 SocketAddr::from((Ipv4Addr::new(239, 1, 1, 10), 46053)),
18 )
19 .await?;
20 Ok(())
21}examples/multi_group.rs (line 8)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Joins multiple groups and prints the tracked membership count.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 5000)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 1)))
11 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 2)))
12 .build()
13 .await?;
14
15 println!("listening on {}", socket.local_addr()?);
16 let groups = socket.memberships();
17 println!("joined {} groups", groups.len());
18 Ok(())
19}examples/ssm.rs (line 8)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Placeholder example for the future source-specific multicast path.
8 let result = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 5000)))
10 .join_source(
11 IpAddr::V4(Ipv4Addr::new(232, 1, 1, 1)),
12 IpAddr::V4(Ipv4Addr::new(192, 168, 1, 10)),
13 )
14 .build()
15 .await;
16
17 match result {
18 Ok(_) => println!("source-specific multicast socket created"),
19 Err(err) => println!("source-specific multicast is not implemented yet: {err}"),
20 }
21
22 Ok(())
23}examples/send_and_receive.rs (line 12)
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let group = Ipv4Addr::new(239, 1, 1, 11);
9 let receiver_port = 46055;
10 let sender_port = 46056;
11
12 let receiver = MulticastSocket::builder()
13 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, receiver_port)))
14 .join(IpAddr::V4(group))
15 .build()
16 .await?;
17
18 let sender = MulticastSocket::builder()
19 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, sender_port)))
20 .join(IpAddr::V4(group))
21 .build()
22 .await?;
23
24 sender
25 .send_to(b"hello multicast", SocketAddr::from((group, receiver_port)))
26 .await?;
27
28 let mut buf = [0_u8; 2048];
29 let (n, from) = timeout(Duration::from_secs(2), receiver.recv_from(&mut buf))
30 .await??
31 ;
32
33 println!("received {} bytes from {}", n, from);
34 println!("payload: {}", String::from_utf8_lossy(&buf[..n]));
35
36 Ok(())
37}Sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Examples found in repository?
examples/multi_group.rs (line 15)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Joins multiple groups and prints the tracked membership count.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 5000)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 1)))
11 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 2)))
12 .build()
13 .await?;
14
15 println!("listening on {}", socket.local_addr()?);
16 let groups = socket.memberships();
17 println!("joined {} groups", groups.len());
18 Ok(())
19}pub fn config(&self) -> &MulticastConfig
Sourcepub fn memberships(&self) -> HashSet<Membership>
pub fn memberships(&self) -> HashSet<Membership>
Examples found in repository?
examples/multi_group.rs (line 16)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Joins multiple groups and prints the tracked membership count.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 5000)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 1)))
11 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 2)))
12 .build()
13 .await?;
14
15 println!("listening on {}", socket.local_addr()?);
16 let groups = socket.memberships();
17 println!("joined {} groups", groups.len());
18 Ok(())
19}pub async fn join(&self, membership: Membership) -> Result<()>
pub async fn leave(&self, membership: &Membership) -> Result<()>
Sourcepub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
pub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
Examples found in repository?
examples/simple_receiver.rs (line 16)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Listens on a multicast group until interrupted.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 46053)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 10)))
11 .build()
12 .await?;
13
14 let mut buf = [0_u8; 2048];
15 loop {
16 let (n, from) = socket.recv_from(&mut buf).await?;
17 println!("received {n} bytes from {from}");
18 }
19}More examples
examples/send_and_receive.rs (line 29)
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let group = Ipv4Addr::new(239, 1, 1, 11);
9 let receiver_port = 46055;
10 let sender_port = 46056;
11
12 let receiver = MulticastSocket::builder()
13 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, receiver_port)))
14 .join(IpAddr::V4(group))
15 .build()
16 .await?;
17
18 let sender = MulticastSocket::builder()
19 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, sender_port)))
20 .join(IpAddr::V4(group))
21 .build()
22 .await?;
23
24 sender
25 .send_to(b"hello multicast", SocketAddr::from((group, receiver_port)))
26 .await?;
27
28 let mut buf = [0_u8; 2048];
29 let (n, from) = timeout(Duration::from_secs(2), receiver.recv_from(&mut buf))
30 .await??
31 ;
32
33 println!("received {} bytes from {}", n, from);
34 println!("payload: {}", String::from_utf8_lossy(&buf[..n]));
35
36 Ok(())
37}pub async fn recv(&self, buf: &mut [u8]) -> Result<usize>
pub async fn recv_datagram(&self, buf_size: usize) -> Result<Datagram>
Sourcepub async fn send_to(&self, payload: &[u8], target: SocketAddr) -> Result<usize>
pub async fn send_to(&self, payload: &[u8], target: SocketAddr) -> Result<usize>
Examples found in repository?
examples/simple_sender.rs (lines 15-18)
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 // Sends a single datagram to the same group used by simple_receiver.
8 let socket = MulticastSocket::builder()
9 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 46054)))
10 .join(IpAddr::V4(Ipv4Addr::new(239, 1, 1, 10)))
11 .build()
12 .await?;
13
14 socket
15 .send_to(
16 b"hello multicast",
17 SocketAddr::from((Ipv4Addr::new(239, 1, 1, 10), 46053)),
18 )
19 .await?;
20 Ok(())
21}More examples
examples/send_and_receive.rs (line 25)
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let group = Ipv4Addr::new(239, 1, 1, 11);
9 let receiver_port = 46055;
10 let sender_port = 46056;
11
12 let receiver = MulticastSocket::builder()
13 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, receiver_port)))
14 .join(IpAddr::V4(group))
15 .build()
16 .await?;
17
18 let sender = MulticastSocket::builder()
19 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, sender_port)))
20 .join(IpAddr::V4(group))
21 .build()
22 .await?;
23
24 sender
25 .send_to(b"hello multicast", SocketAddr::from((group, receiver_port)))
26 .await?;
27
28 let mut buf = [0_u8; 2048];
29 let (n, from) = timeout(Duration::from_secs(2), receiver.recv_from(&mut buf))
30 .await??
31 ;
32
33 println!("received {} bytes from {}", n, from);
34 println!("payload: {}", String::from_utf8_lossy(&buf[..n]));
35
36 Ok(())
37}pub async fn send_to_group(&self, payload: &[u8]) -> Result<usize>
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for MulticastSocket
impl RefUnwindSafe for MulticastSocket
impl Send for MulticastSocket
impl Sync for MulticastSocket
impl Unpin for MulticastSocket
impl UnsafeUnpin for MulticastSocket
impl UnwindSafe for MulticastSocket
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more