summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/udp_async.rs4
-rw-r--r--src/net/udp.rs174
2 files changed, 2 insertions, 176 deletions
diff --git a/examples/udp_async.rs b/examples/udp_async.rs
index 606b6cd..5fdc1ef 100644
--- a/examples/udp_async.rs
+++ b/examples/udp_async.rs
@@ -2,8 +2,7 @@
//! Use `nc -u 127.0.0.1 30000` to connect.
use mini_rust_runtime::executor::Executor;
-use mini_rust_runtime::udp::UdpSocket;
-use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use mini_rust_runtime::net::udp::UdpSocket;
fn main() {
let ex = Executor::new(); // 执行器实例
@@ -17,6 +16,7 @@ async fn server() {
match socket.recv_from_async(&mut buf).await {
Ok((n, addr)) => {
println!("recv_from {} {} bytes", addr, n);
+ println!("Received data {:?}", &buf[..n]);
if n == 0 || socket.send_to_async(&buf[..n], &addr).await.is_err() {
// 回写
return;
diff --git a/src/net/udp.rs b/src/net/udp.rs
index 0a6a391..d261a86 100644
--- a/src/net/udp.rs
+++ b/src/net/udp.rs
@@ -131,14 +131,6 @@ impl UdpSocket {
}
}
-// impl From<StdUdpSocket> for UdpSocket {
-// fn from(socket: StdUdpSocket) -> Self {
-// Self {
-// reactor: Weak::new(),
-// socket,
-// }
-// }
-// }
impl Drop for UdpSocket {
fn drop(&mut self) {
@@ -149,169 +141,3 @@ impl Drop for UdpSocket {
}
}
}
-
-// impl Future for UdpSocket {
-// type Output = io::Result<(usize, SocketAddr)>;
-
-// fn poll(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll<Self::Output> {
-// let mut buf = [0; 1024];
-// match self.socket.recv_from(&mut buf) {
-// Ok((n, addr)) => {
-// println!("recv_from {} {} bytes", addr, n);
-// Poll::Ready(Ok((n, addr)))
-// }
-// Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
-// // 读取失败,且错误类型为 WouldBlock
-// println!("read for fd {} done WouldBlock", self.socket.as_raw_fd());
-// // 修改反应器以注册感兴趣的事件
-// let reactor = get_reactor(); // 获取 reactor
-// reactor
-// .borrow_mut()
-// .modify_readable(self.socket.as_raw_fd(), cx); // 注册到 reactor 可读事件
-// Poll::Pending // 等待
-// }
-// Err(e) => {
-// println!("read for fd {} done err", self.socket.as_raw_fd());
-// Poll::Ready(Err(e)) // 结束(错误)
-// }
-// }
-// }
-// }
-
-// impl Stream for UdpSocket {
-// type Item = io::Result<(usize, SocketAddr)>;
-
-// fn poll_next(
-// self: std::pin::Pin<&mut Self>,
-// cx: &mut std::task::Context<'_>,
-// ) -> std::task::Poll<Option<Self::Item>> {
-// match self.socket.recv_from(&mut self.buf) {
-// Ok((n, addr)) => {
-// println!("recv_from {} {} bytes", addr, n);
-// Poll::Ready(Some(Ok((n, addr))))
-// }
-// Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
-// // 读取失败,且错误类型为 WouldBlock
-// println!("read for fd {} done WouldBlock", self.socket.as_raw_fd());
-// // 修改反应器以注册感兴趣的事件
-// let reactor = get_reactor(); // 获取 reactor
-// reactor
-// .borrow_mut()
-// .modify_readable(self.socket.as_raw_fd(), cx); // 注册到 reactor 可读事件
-// Poll::Pending // 等待
-// }
-// Err(e) => {
-// println!("read for fd {} done err", self.socket.as_raw_fd());
-// Poll::Ready(Some(Err(e))) // 结束(错误)
-// }
-// }
-// }
-// }
-
-// impl UdpSocket{
-// pub async fn recv_from(&self, buf: &mut [u8]) -> io::Result<(usize, SocketAddr)> {
-// let mut buf = tokio::io::ReadBuf::new(buf);
-// self.read(&mut buf).await?;
-// Ok((buf.filled().len(), buf.filled().len()))
-// }
-// }
-
-// impl Future for UdpSocket {
-// type Output = io::Result<(Vec<u8>, SocketAddr)>;
-
-// fn poll(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll<Self::Output> {
-// let mut buf = vec![0u8; 1024];
-// match self.socket.recv_from(&mut buf) {
-// Ok((n, addr)) => {
-// println!("recv_from {} {} bytes", addr, n);
-// Poll::Ready(Ok((buf, addr)))
-// }
-// Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
-// // 读取失败,且错误类型为 WouldBlock
-// println!("read for fd {} done WouldBlock", self.socket.as_raw_fd());
-// // 修改反应器以注册感兴趣的事件
-// let reactor = get_reactor(); // 获取 reactor
-// reactor
-// .borrow_mut()
-// .modify_readable(self.socket.as_raw_fd(), cx); // 注册到 reactor 可读事件
-// Poll::Pending // 等待
-// }
-// Err(e) => {
-// println!("read for fd {} done err", self.socket.as_raw_fd());
-// Poll::Ready(Err(e)) // 结束(错误)
-// }
-// }
-// }
-// }
-
-// // 为 UdpSocket 实现 tokio::io::AsyncWrite
-// impl tokio::io::AsyncWrite for UdpSocket {
-// fn poll_write(
-// mut self: std::pin::Pin<&mut Self>,
-// cx: &mut std::task::Context<'_>,
-// buf: &[u8],
-// ) -> Poll<Result<usize, io::Error>> {
-// match self.send_to(buf, &"127.0.0.1:8080".parse().unwrap()) {
-// Ok(n) => Poll::Ready(Ok(n)), // 写入成功
-// Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => { // 写入失败,且错误类型为 WouldBlock
-// let reactor: Rc<RefCell<Reactor>> = get_reactor();
-// reactor
-// .borrow_mut()
-// .modify_writable(self.socket.as_raw_fd(), cx); // 注册可写事件
-// Poll::Pending
-// }
-// Err(e) => Poll::Ready(Err(e)), // 写入失败,返回结果(错误信息)
-// }
-// }
-
-// fn poll_flush(
-// self: std::pin::Pin<&mut Self>,
-// cx: &mut std::task::Context<'_>,
-// ) -> Poll<Result<(), io::Error>> {
-// Poll::Ready(Ok(()))
-// }
-
-// fn poll_shutdown(
-// self: std::pin::Pin<&mut Self>,
-// cx: &mut std::task::Context<'_>,
-// ) -> Poll<Result<(), io::Error>> {
-// Poll::Ready(Ok(()))
-// }
-// }
-
-// 为 UdpSocket 实现 tokio::io::AsyncRead
-// impl tokio::io::AsyncRead for UdpSocket {
-// fn poll_read(
-// mut self: std::pin::Pin<&mut Self>,
-// cx: &mut std::task::Context<'_>,
-// buf: &mut tokio::io::ReadBuf<'_>,
-// ) -> Poll<Result<(), std::io::Error>> {
-// let fd: i32 = self.socket.as_raw_fd(); // 获取 socket 对应的 fd
-// unsafe {
-// // 将 ReadBuf 转换为 [u8] , socket.recv_from 需要
-// let b = &mut *(buf.unfilled_mut() as *mut [std::mem::MaybeUninit<u8>] as *mut [u8]);
-// println!("read for fd {}", fd);
-// match self.socket.recv_from(b) {
-// Ok((size, addr)) => {
-// // 读取成功
-// println!("read for fd {} done, {}", fd, size);
-// Poll::Ready(Ok((size, addr)))
-// }
-// Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
-// // 读取失败,且错误类型为 WouldBlock
-// println!("read for fd {} done WouldBlock", fd);
-// // 修改反应器以注册感兴趣的事件
-// let reactor = get_reactor(); // 获取 reactor
-// reactor
-// .borrow_mut()
-// .modify_readable(self.socket.as_raw_fd(), cx); // 注册到 reactor 可读事件
-// Poll::Pending // 等待
-// }
-// Err(e) => {
-// println!("read for fd {} done err", fd);
-// Poll::Ready(Err(e)) // 结束(错误)
-// }
-// }
-// }
-// }
-// }