# 1.10.0[−][src]Struct std::os::unix::net::UnixListener

    pub struct UnixListener(_);

This is supported on Unix only.

A structure representing a Unix domain socket server.

# Examples

    use std::thread;
    use std::os::unix::net::{UnixStream, UnixListener};

    fn handle_client(stream: UnixStream) {
        // ...
    }

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;

        // accept connections and process them, spawning a new thread for each one
        for stream in listener.incoming() {
            match stream {
                Ok(stream) => {
                    /* connection succeeded */
                    thread::spawn(|| handle_client(stream));
                }
                Err(err) => {
                    /* connection failed */
                    break;
                }
            }
        }
        Ok(())
    }Run

## Methods

### `impl UnixListener`[src]

#### `pub fn bind<P: AsRef<Path>>(path: P) -> Result<UnixListener>`[src]

This is supported on Unix only.

Creates a new `UnixListener` bound to the specified socket.

# Examples

    use std::os::unix::net::UnixListener;

    let listener = match UnixListener::bind("/path/to/the/socket") {
        Ok(sock) => sock,
        Err(e) => {
            println!("Couldn't connect: {:?}", e);
            return
        }
    };Run

#### `pub fn accept(&self) -> Result<(UnixStream, SocketAddr)>`[src]

This is supported on Unix only.

Accepts a new incoming connection to this listener.

This function will block the calling thread until a new Unix connection is established. When established, the corresponding `UnixStream` and the remote peer's address will be returned.

# Examples

    use std::os::unix::net::UnixListener;

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;

        match listener.accept() {
            Ok((socket, addr)) => println!("Got a client: {:?}", addr),
            Err(e) => println!("accept function failed: {:?}", e),
        }
        Ok(())
    }Run

#### `pub fn try_clone(&self) -> Result<UnixListener>`[src]

This is supported on Unix only.

Creates a new independently owned handle to the underlying socket.

The returned `UnixListener` is a reference to the same socket that this object references. Both handles can be used to accept incoming connections and options set on one listener will affect the other.

# Examples

    use std::os::unix::net::UnixListener;

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;
        let listener_copy = listener.try_clone().expect("try_clone failed");
        Ok(())
    }Run

#### `pub fn local_addr(&self) -> Result<SocketAddr>`[src]

This is supported on Unix only.

Returns the local socket address of this listener.

# Examples

    use std::os::unix::net::UnixListener;

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;
        let addr = listener.local_addr().expect("Couldn't get local address");
        Ok(())
    }Run

#### `pub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>`[src]

This is supported on Unix only.

Moves the socket into or out of nonblocking mode.

# Examples

    use std::os::unix::net::UnixListener;

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;
        listener.set_nonblocking(true).expect("Couldn't set non blocking");
        Ok(())
    }Run

#### `pub fn take_error(&self) -> Result<Option<Error>>`[src]

This is supported on Unix only.

Returns the value of the `SO_ERROR` option.

# Examples

    use std::os::unix::net::UnixListener;

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/tmp/sock")?;

        if let Ok(Some(err)) = listener.take_error() {
            println!("Got error: {:?}", err);
        }
        Ok(())
    }Run

# Platform specific

On Redox this always returns `None`.

####
ⓘImportant traits for Incoming<'a>

### Important traits for Incoming<'a>

`impl<'a> Iterator for Incoming<'a> type Item = Result<UnixStream>;`
`pub fn incoming(&self) -> Incoming`[src]

This is supported on Unix only.

Returns an iterator over incoming connections.

The iterator will never return `None` and will also not yield the peer's `SocketAddr` structure.

# Examples

    use std::thread;
    use std::os::unix::net::{UnixStream, UnixListener};

    fn handle_client(stream: UnixStream) {
        // ...
    }

    fn main() -> std::io::Result<()> {
        let listener = UnixListener::bind("/path/to/the/socket")?;

        for stream in listener.incoming() {
            match stream {
                Ok(stream) => {
                    thread::spawn(|| handle_client(stream));
                }
                Err(err) => {
                    break;
                }
            }
        }
        Ok(())
    }Run

## Trait Implementations

### `impl AsRawFd for UnixListener`[src]

#### `fn as_raw_fd(&self) -> RawFd`[src]

This is supported on Unix only.

Extracts the raw file descriptor. Read more

### `impl Debug for UnixListener`[src]

#### `fn fmt(&self, fmt: &mut Formatter) -> Result`[src]

Formats the value using the given formatter. Read more

### `impl FromRawFd for UnixListener`[src]

#### `unsafe fn from_raw_fd(fd: RawFd) -> UnixListener`[src]

This is supported on Unix only.

Constructs a new instance of `Self` from the given raw file descriptor. Read more

### `impl<'a> IntoIterator for &'a UnixListener`[src]

#### `type Item = Result<UnixStream>`

The type of the elements being iterated over.

#### `type IntoIter = Incoming<'a>`

Which kind of iterator are we turning this into?

####
ⓘImportant traits for Incoming<'a>

### Important traits for Incoming<'a>

`impl<'a> Iterator for Incoming<'a> type Item = Result<UnixStream>;`
`fn into_iter(self) -> Incoming<'a>`[src]

Creates an iterator from a value. Read more

### `impl IntoRawFd for UnixListener`[src]

#### `fn into_raw_fd(self) -> RawFd`[src]

This is supported on Unix only.

Consumes this object, returning the raw underlying file descriptor. Read more

## Auto Trait Implementations

### `impl RefUnwindSafe for UnixListener`

### `impl Send for UnixListener`

### `impl Sync for UnixListener`

### `impl Unpin for UnixListener`

### `impl UnwindSafe for UnixListener`

## Blanket Implementations

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut F

### Important traits for &'_ mut F

`impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, R: Read + ?Sized> Read for &'_ mut Rimpl<'_, W: Write + ?Sized> Write for &'_ mut W`
`fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut F

### Important traits for &'_ mut F

`impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, R: Read + ?Sized> Read for &'_ mut Rimpl<'_, W: Write + ?Sized> Write for &'_ mut W`
`fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = !`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.