use crate::io::{AsyncBind, AsyncConnectDatagram, AsyncPeekFrom, AsyncRecvFrom, AsyncSendTo};
use crate::net::connected_datagram::ConnectedDatagram;
use crate::net::Socket;
use std::net::{Ipv4Addr, Ipv6Addr};
pub trait Datagram:
Socket
+ AsyncConnectDatagram<Self::ConnectedDatagram>
+ AsyncRecvFrom
+ AsyncPeekFrom
+ AsyncSendTo
+ AsyncBind
{
type ConnectedDatagram: ConnectedDatagram;
#[inline(always)]
fn set_broadcast(&self, broadcast: bool) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.set_broadcast(broadcast)
}
#[inline(always)]
fn broadcast(&self) -> std::io::Result<bool> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.broadcast()
}
#[inline(always)]
fn set_multicast_loop_v4(&self, multicast_loop_v4: bool) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.set_multicast_loop_v4(multicast_loop_v4)
}
#[inline(always)]
fn multicast_loop_v4(&self) -> std::io::Result<bool> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.multicast_loop_v4()
}
#[inline(always)]
fn set_multicast_ttl_v4(&self, multicast_ttl_v4: u32) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.set_multicast_ttl_v4(multicast_ttl_v4)
}
#[inline(always)]
fn multicast_ttl_v4(&self) -> std::io::Result<u32> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.multicast_ttl_v4()
}
#[inline(always)]
fn set_multicast_loop_v6(&self, multicast_loop_v6: bool) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.set_multicast_loop_v6(multicast_loop_v6)
}
#[inline(always)]
fn multicast_loop_v6(&self) -> std::io::Result<bool> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.multicast_loop_v6()
}
#[inline(always)]
fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.join_multicast_v4(multiaddr, interface)
}
#[inline(always)]
fn join_multicast_v6(&self, multiaddr: &Ipv6Addr, interface: u32) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.join_multicast_v6(multiaddr, interface)
}
#[inline(always)]
fn leave_multicast_v4(
&self,
multiaddr: &Ipv4Addr,
interface: &Ipv4Addr,
) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.leave_multicast_v4(multiaddr, interface)
}
#[inline(always)]
fn leave_multicast_v6(&self, multiaddr: &Ipv6Addr, interface: u32) -> std::io::Result<()> {
let borrow_fd = self.as_fd();
let socket_ref = socket2::SockRef::from(&borrow_fd);
socket_ref.leave_multicast_v6(multiaddr, interface)
}
}