Skip to content

Instantly share code, notes, and snippets.

@dermesser
Created December 2, 2016 20:40
Show Gist options
  • Save dermesser/e331094c2ab28fc7f6ba8a16183fe4d5 to your computer and use it in GitHub Desktop.
Save dermesser/e331094c2ab28fc7f6ba8a16183fe4d5 to your computer and use it in GitHub Desktop.
extern crate tokio_core;
extern crate futures;
use std::io;
use std::net::{self, SocketAddr, ToSocketAddrs};
use tokio_core::net::{RecvDgram, UdpSocket};
use futures::Future;
fn handle_dgram
(arg: (UdpSocket, Vec<u8>, usize, net::SocketAddr))
-> Box<Future<Item = (UdpSocket, Vec<u8>, usize, net::SocketAddr), Error = io::Error>> {
let (sock, buf, _, _) = arg;
println!("{:?}", buf);
Box::new(sock.recv_dgram(buf).and_then(handle_dgram))
}
fn main() {
let mut l = tokio_core::reactor::Core::new().unwrap();
let handle = l.handle();
let addr = "0.0.0.0:12345".to_socket_addrs().unwrap().next().unwrap();
let sock = UdpSocket::bind(&addr, &handle).unwrap();
let mut buf = Vec::new();
buf.resize(128, 0);
let recv = sock.recv_dgram(buf);
l.run(recv.and_then(handle_dgram));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment