blob: b7236779d9dc05d513dcf94ad83878372d8191f2 [file] [log] [blame]
//! Networking primitives
//!
pub mod tcp;
pub mod udp;
use {poll, Poll};
use std::io;
use std::sync::atomic::{AtomicUsize, Ordering};
/// Used to associate an IO type with a Selector
#[derive(Debug)]
struct SelectorId {
id: AtomicUsize,
}
impl SelectorId {
fn new() -> SelectorId {
SelectorId {
id: AtomicUsize::new(0),
}
}
fn associate_selector(&self, poll: &Poll) -> io::Result<()> {
let selector_id = self.id.load(Ordering::SeqCst);
if selector_id != 0 && selector_id != poll::selector(poll).id() {
Err(io::Error::new(io::ErrorKind::Other, "socket already registered"))
} else {
self.id.store(poll::selector(poll).id(), Ordering::SeqCst);
Ok(())
}
}
}
impl Clone for SelectorId {
fn clone(&self) -> SelectorId {
SelectorId {
id: AtomicUsize::new(self.id.load(Ordering::SeqCst)),
}
}
}