use std::io::{self, Error, ErrorKind};
use std::net::{UdpSocket, SocketAddr};
pub const MAX_PCKT_LEN: usize = 600;
pub struct PacketReceiver(UdpSocket);
impl PacketReceiver {
pub fn new(udp: UdpSocket) -> PacketReceiver {
PacketReceiver(udp)
}
pub fn recv_pckt(&self) -> io::Result<(Vec<u8>, SocketAddr)> {
let mut pckt_buf = vec![0u8; MAX_PCKT_LEN];
let (size, addr) = try!(self.0.recv_from(&mut pckt_buf));
if size > pckt_buf.len() {
Err(Error::new(ErrorKind::Other,
"UdpSocket Reported Receive Length Greater Than Buffer"))
} else {
unsafe{ pckt_buf.set_len(size) };
Ok((pckt_buf, addr))
}
}
}