In connect timeout, read readiness of socket for vxworks. Check pollh… · patricklam/verify-rust-std@3a18110

@@ -213,16 +213,25 @@ impl Socket {

213213

}

214214

0 => {}

215215

_ => {

216-

// linux returns POLLOUT|POLLERR|POLLHUP for refused connections (!), so look

217-

// for POLLHUP rather than read readiness

218-

if pollfd.revents & libc::POLLHUP != 0 {

219-

let e = self.take_error()?.unwrap_or_else(|| {

220-

io::const_io_error!(

221-

io::ErrorKind::Uncategorized,

222-

"no error set after POLLHUP",

223-

)

224-

});

225-

return Err(e);

216+

if cfg!(target_os = "vxworks") {

217+

// VxWorks poll does not return POLLHUP or POLLERR in revents. Check if the

218+

// connnection actually succeeded and return ok only when the socket is

219+

// ready and no errors were found.

220+

if let Some(e) = self.take_error()? {

221+

return Err(e);

222+

}

223+

} else {

224+

// linux returns POLLOUT|POLLERR|POLLHUP for refused connections (!), so look

225+

// for POLLHUP or POLLERR rather than read readiness

226+

if pollfd.revents & (libc::POLLHUP | libc::POLLERR) != 0 {

227+

let e = self.take_error()?.unwrap_or_else(|| {

228+

io::const_io_error!(

229+

io::ErrorKind::Uncategorized,

230+

"no error set after POLLHUP",

231+

)

232+

});

233+

return Err(e);

234+

}

226235

}

227236228237

return Ok(());