Skip to content

Instantly share code, notes, and snippets.

@aep
Created July 16, 2020 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aep/ead3c02a7c43d543319d96ba2f6496ec to your computer and use it in GitHub Desktop.
Save aep/ead3c02a7c43d543319d96ba2f6496ec to your computer and use it in GitHub Desktop.
struct UdpEcho
{
udp::Socket sock;
udp::Receive+1000 recv;
udp::Receive+1000 send;
}
fn poll(UdpEcho mut*self, async::Eq mut*eq)
{
switch self->send.state() {
async::State::Parked => {
return;
},
async::State::Error => {
ev->error.abort();
return;
}
default => {
}
}
switch self->recv.state() {
async::State::Parked => {
return;
},
async::State::Error => {
ev->error.abort();
return;
}
async::State::Ready => {
log::info("got %s", self->buf.mem);
slice::copy(&self->recv.mem, &self->send.packet);
self->sock.async_send(&self->send, eq);
}
async::State::Invalid | async::State::Canceled => {
}
}
self->sock.async_recv(&self->recv, eq);
}
fn main() {
new eq = async::eventqueue();
for (;;) {
myecho.poll(&eq);
eq.park();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment