Skip to content

Commit

Permalink
Fix socket listen
Browse files Browse the repository at this point in the history
  • Loading branch information
vinc committed Jul 16, 2023
1 parent 7d01eb2 commit 0ec8f6e
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions src/usr/socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ pub fn main(args: &[&str]) -> Result<(), ExitCode> {
}
};

let mut connected = false;
let stdin = 0;
let stdout = 1;
let flags = OpenFlag::Device as usize;
Expand All @@ -85,7 +86,9 @@ pub fn main(args: &[&str]) -> Result<(), ExitCode> {
debug!("Listening to {}:{}", addr, port);
}
} else {
if syscall::connect(handle, addr, port).is_err() {
if syscall::connect(handle, addr, port).is_ok() {
connected = true;
} else {
error!("Could not connect to {}:{}", addr, port);
syscall::close(handle);
return Err(ExitCode::Failure);
Expand All @@ -101,6 +104,15 @@ pub fn main(args: &[&str]) -> Result<(), ExitCode> {
break;
}

if listen && !connected {
if syscall::accept(handle).is_ok() {
connected = true;
} else {
syscall::sleep(0.01);
continue;
}
}

let list = vec![(stdin, IO::Read), (handle, IO::Read)];
if let Some((h, _)) = syscall::poll(&list) {
if h == stdin {
Expand All @@ -115,12 +127,14 @@ pub fn main(args: &[&str]) -> Result<(), ExitCode> {
}
} else {
syscall::sleep(0.01);
let mut data = vec![0; 1]; // 1 byte status read
match syscall::read(handle, &mut data) {
Some(1) if !data[0].get_bit(SocketStatus::MayRecv as usize) => {
break; // recv closed
if connected {
let mut data = vec![0; 1]; // 1 byte status read
match syscall::read(handle, &mut data) {
Some(1) if !data[0].get_bit(SocketStatus::MayRecv as usize) => {
break; // recv closed
}
_ => continue,
}
_ => continue,
}
}
}
Expand Down

0 comments on commit 0ec8f6e

Please sign in to comment.