In connect timeout, read readiness of socket for vxworks. Check pollh… · model-checking/verify-rust-std@3a18110 (original) (raw)
`@@ -213,16 +213,25 @@ impl Socket {
`
213
213
`}
`
214
214
`0 => {}
`
215
215
` _ => {
`
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
`+
}
`
226
235
`}
`
227
236
``
228
237
`return Ok(());
`