From 9004a8f65352230ddd729a2b2e983ce9b2970613 Mon Sep 17 00:00:00 2001 From: hikalium Date: Sun, 1 Sep 2024 05:04:30 +0900 Subject: [PATCH] update socket rx handling --- os/src/cmd.rs | 9 +++++++++ os/src/main.rs | 1 - os/src/net/tcp.rs | 14 ++++++++------ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/os/src/cmd.rs b/os/src/cmd.rs index 2b00377a..7143986a 100644 --- a/os/src/cmd.rs +++ b/os/src/cmd.rs @@ -123,6 +123,15 @@ pub async fn run(cmdline: &str) -> Result<()> { sock.tx_data() .lock() .extend(format!("GET / HTTP/1.0\nHost: {host}\n\n").bytes()); + let mut received = Vec::new(); + while sock.is_established() { + sock.wait_on_rx().await; + let mut rx_data_locked = sock.rx_data().lock(); + received.extend(rx_data_locked.drain(..)) + } + if let Ok(received) = core::str::from_utf8(&received) { + println!("{received}"); + } } "arp" => { println!("{:?}", network.arp_table_cloned()) diff --git a/os/src/main.rs b/os/src/main.rs index 26c0caf9..e4d4bf79 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -199,7 +199,6 @@ fn run_tasks() -> Result<()> { let mut tx_data_locked = sock.tx_data().lock(); tx_data_locked.extend(data.iter()); } - sock.poll_tx()?; } yield_execution().await; } diff --git a/os/src/net/tcp.rs b/os/src/net/tcp.rs index 40b6a3f6..0f15ca67 100644 --- a/os/src/net/tcp.rs +++ b/os/src/net/tcp.rs @@ -367,12 +367,6 @@ impl TcpSocket { fin = true; *self.state.lock() = TcpSocketState::LastAck; } - if let Ok(s) = core::str::from_utf8(in_tcp_data) { - info!( - "net: tcp: recv: data(str) size = {}: {s}", - in_tcp_data.len() - ); - } seq_to_ack = seq_to_ack.wrapping_add(in_tcp_data.len() as u32); self.rx_data.lock().extend(in_tcp_data); // Send ACK @@ -479,4 +473,12 @@ impl TcpSocket { yield_execution().await; } } + pub async fn wait_on_rx(&self) { + while *self.state.lock() == TcpSocketState::Established && self.rx_data.lock().is_empty() { + yield_execution().await; + } + } + pub fn is_established(&self) -> bool { + *self.state.lock() == TcpSocketState::Established + } }