summaryrefslogtreecommitdiff
path: root/src/tcp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tcp.rs')
-rw-r--r--src/tcp.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/tcp.rs b/src/tcp.rs
index 2063e0a..94b876a 100644
--- a/src/tcp.rs
+++ b/src/tcp.rs
@@ -15,8 +15,8 @@ use crate::{reactor::get_reactor, reactor::Reactor};
/// TCP 监听器
#[derive(Debug)]
pub struct TcpListener {
- reactor: Weak<RefCell<Reactor>>,
- listener: StdTcpListener,
+ reactor: Weak<RefCell<Reactor>>, // reactor
+ listener: StdTcpListener, // 标准库的 TcpListener | 包装一层
}
impl TcpListener {
@@ -42,20 +42,20 @@ impl TcpListener {
sk.bind(&addr)?;
sk.listen(1024)?;
- // 将 fd 添加到反应器中
+ // 将 fd 添加到 reactor 中
let reactor = get_reactor();
reactor.borrow_mut().add(sk.as_raw_fd());
println!("tcp bind with fd {}", sk.as_raw_fd());
Ok(Self {
- reactor: Rc::downgrade(&reactor),
+ reactor: Rc::downgrade(&reactor),
listener: sk.into(),
})
}
}
-
-impl Stream for TcpListener {
- type Item = std::io::Result<(TcpStream, SocketAddr)>;
+//Stream 流
+impl Stream for TcpListener { //TcpStream 和 TcpListener 在这链接
+ type Item = std::io::Result<(TcpStream, SocketAddr)>; //
fn poll_next(
self: std::pin::Pin<&mut Self>,
@@ -63,12 +63,12 @@ impl Stream for TcpListener {
) -> std::task::Poll<Option<Self::Item>> {
match self.listener.accept() {
Ok((stream, addr)) => Poll::Ready(Some(Ok((stream.into(), addr)))),
- Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
+ Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => { // 继续阻塞
// 修改反应器以注册感兴趣的事件
let reactor = self.reactor.upgrade().unwrap();
reactor
.borrow_mut()
- .modify_readable(self.listener.as_raw_fd(), cx);
+ .modify_readable(self.listener.as_raw_fd(), cx); // 可读事件
Poll::Pending
}
Err(e) => std::task::Poll::Ready(Some(Err(e))),