TokioSocket2

To make socket2 work with tokio.

Usage

```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]>(&mut buf[pos..]) }; socket.recv(buf) }).await?;

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"); ```