Merge branch 'fix-detect-connection-fail' of github.com:irvingoujAtDevolution/polling into fix-detect-connection-fail

This commit is contained in:
irving ou 2024-02-13 12:38:48 -05:00
commit 93dc77cf17
2 changed files with 25 additions and 42 deletions

View File

@ -1,7 +1,5 @@
use std::io;
#[cfg(target_os = "linux")]
fn main() -> io::Result<()> {
fn main() -> std::io::Result<()> {
use std::net;
use std::{io::Write, time::Duration};
@ -85,8 +83,9 @@ fn main() -> io::Result<()> {
}
#[cfg(target_os = "windows")]
fn main() -> io::Result<()> {
fn main() -> std::io::Result<()> {
use polling::Event;
use std::io;
use std::{io::Write, time::Duration};
std::thread::spawn(|| {

View File

@ -403,52 +403,36 @@ impl Event {
/// # Examples
///
/// ```
/// #[cfg(target_os = "linux")]
/// fn main() -> io::Result<()> {
/// use std::{io::Write, time::Duration};
/// fn main() -> std::io::Result<()> {
/// use std::net;
/// use std::time::Duration;
///
/// std::thread::spawn(|| {
/// let listener = net::TcpListener::bind("0.0.0.0:8080").unwrap();
/// println!("Listening on {}", listener.local_addr().unwrap());
/// for stream in listener.incoming() {
/// let mut stream = stream.unwrap();
/// stream.write(b"Hello, world!\n").unwrap();
/// }
/// });
/// std::thread::sleep(Duration::from_millis(100));
/// let socket = socket2::Socket::new(socket2::Domain::IPV4, Type::STREAM, None)?;
/// use polling::Event;
/// use socket2::Type;
/// let poller = polling::Poller::new()?;
/// let bad_socket = socket2::Socket::new(socket2::Domain::IPV4, Type::STREAM, None)?;
/// let addr = net::SocketAddr::new("127.0.0.1".parse().unwrap(), 12345);
/// bad_socket.set_nonblocking(true)?;
/// let mut events = polling::Events::new();
///
/// let _ = bad_socket.connect(&addr.into()).unwrap_err();
///
/// unsafe {
/// poller.add(&socket, Event::new(0, true, true))?;
/// poller.add(&bad_socket, Event::writable(0))?;
/// }
///
/// socket.set_nonblocking(true)?;
///
/// let mut events = polling::Events::new();
/// poller.wait(&mut events, Some(Duration::from_secs(3)))?;
///
/// let event = events.iter().next().expect("no event");
///
/// assert!(event.is_interrupt());
///
/// let addr = net::SocketAddr::new("127.0.0.1".parse().unwrap(), 8080);
/// let err = socket.connect(&addr.into()).unwrap_err();
///
/// // EINPROGRESS
/// assert_eq!(115, err.raw_os_error().expect("No OS error"));
///
/// poller.modify(&socket, Event::writable(0)).expect("modify failed");
/// events.clear();
/// poller.wait(&mut events, Some(Duration::from_secs(3)))?;
///
/// let event = events.iter().next().expect("no event");
///
/// assert!(event.writable);
/// assert!(!event.is_interrupt());
/// assert!(!event.is_err().unwrap());
///
/// println!("event: {:?}", event);
/// println!("socket is now writable");
/// let is_err = match event.is_err() {
/// Some(is_err) => is_err,
/// None => {
/// println!("not supported in this platform");
/// return Ok(());
/// },
/// };
/// assert!(is_err);
/// println!("bad socket is now in error state");
///
/// Ok(())
/// }