To make socket2 work with tokio.
```rust let listensocket = Socket::new(Domain::IPV4, Type::STREAM, Some(Protocol::TCP))?; listensocket.setnonblocking(true)?; listensocket.setreuseaddress(true)?; listensocket.bind(&SocketAddr::from(([127, 0, 0, 1], 0)).into())?; listensocket.listen(1)?;
let listener = TokioSocket2::new(listen_socket)?;
let listenaddr = listener.getref().localaddr()?.assocket().unwrap();
let mut client = TcpStream::connect(listen_addr).await?;
let (serversocket, _) = listener.read(|socket| socket.accept()).await?; let server = TokioSocket2::new(serversocket)?;
client.write_all(b"ping").await?;
let mut buf = [0; 4]; let mut pos = 0;
while pos < 4 {
let n = server.read(|socket| {
let buf = unsafe {
mem::transmute::<&mut [u8], &mut [MaybeUninit
pos += n;
}
assert_eq!(&buf[..4], b"ping");
server.write(|socket| socket.send(b"pong")).await?;
client.read_exact(&mut buf[..4]).await?;
assert_eq!(&buf[..4], b"pong"); ```