Skip to content

Commit

Permalink
Read readiness of socket in connect timeout for VxWorks target
Browse files Browse the repository at this point in the history
  • Loading branch information
B I Mohammed Abbas committed Jul 24, 2024
1 parent 66b4f00 commit d69f613
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions library/std/src/sys/pal/unix/net.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,16 +213,25 @@ impl Socket {
}
0 => {}
_ => {
// linux returns POLLOUT|POLLERR|POLLHUP for refused connections (!), so look
// for POLLHUP rather than read readiness
if pollfd.revents & libc::POLLHUP != 0 {
let e = self.take_error()?.unwrap_or_else(|| {
io::const_io_error!(
io::ErrorKind::Uncategorized,
"no error set after POLLHUP",
)
});
return Err(e);
if cfg!(target_os = "vxworks") {
// Check if the connnection actually succeeded and return ok only when
// the socket is ready and no errors were found
// https://github.com/rust-lang/rust/issues/127018
if let Some(e) = self.take_error()? {
return Err(e);
}
} else {
// linux returns POLLOUT|POLLERR|POLLHUP for refused connections (!), so look
// for POLLHUP rather than read readiness
if pollfd.revents & libc::POLLHUP != 0 {
let e = self.take_error()?.unwrap_or_else(|| {
io::const_io_error!(
io::ErrorKind::Uncategorized,
"no error set after POLLHUP",
)
});
return Err(e);
}
}

return Ok(());
Expand Down

0 comments on commit d69f613

Please sign in to comment.