# Struct mio::net::TcpStream [−] [src]

    pub struct TcpStream { /* fields omitted */ }

A non-blocking TCP stream between a local socket and a remote socket.

The socket will be closed when the value is dropped.

# Examples

    let address: SocketAddr = "127.0.0.1:0".parse()?;
    let listener = TcpListener::bind(address)?;
    use mio::{Events, Interest, Poll, Token};
    use mio::net::TcpStream;
    use std::time::Duration;

    let mut stream = TcpStream::connect(listener.local_addr()?)?;

    let mut poll = Poll::new()?;
    let mut events = Events::with_capacity(128);

    // Register the socket with `Poll`
    poll.registry().register(&mut stream, Token(0), Interest::WRITABLE)?;

    poll.poll(&mut events, Some(Duration::from_millis(100)))?;

    // The socket might be ready at this point

## Implementations

### `impl TcpStream` [src]

#### `pub fn connect(addr: SocketAddr) -> Result<TcpStream>` [src]

Create a new TCP stream and issue a non-blocking connect to the specified address.

#### `pub fn from_std(stream: TcpStream) -> TcpStreamⓘ

### Notable traits for TcpStream

`impl Read for TcpStreamimpl<'a> Read for &'a TcpStreamimpl Write for TcpStreamimpl<'a> Write for &'a TcpStream`
` [src]

Creates a new `TcpStream` from a standard `net::TcpStream`.

This function is intended to be used to wrap a TCP stream from the standard library in the Mio equivalent. The conversion assumes nothing about the underlying stream; it is left up to the user to set it in non-blocking mode.

# Note

The TCP stream here will not have `connect` called on it, so it should already be connected via some other means (be it manually, or the standard library).

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

Returns the socket address of the remote peer of this TCP connection.

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

Returns the socket address of the local half of this TCP connection.

#### `pub fn shutdown(&self, how: Shutdown) -> Result<()>` [src]

Shuts down the read, write, or both halves of this connection.

This function will cause all pending and future I/O on the specified portions to return immediately with an appropriate value (see the documentation of `Shutdown`).

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

Sets the value of the `TCP_NODELAY` option on this socket.

If set, this option disables the Nagle algorithm. This means that segments are always sent as soon as possible, even if there is only a small amount of data. When not set, data is buffered until there is a sufficient amount to send out, thereby avoiding the frequent sending of small packets.

# Notes

On Windows make sure the stream is connected before calling this method, by receiving an (writable) event. Trying to set `nodelay` on an unconnected `TcpStream` is undefined behavior.

#### `pub fn nodelay(&self) -> Result<bool>` [src]

Gets the value of the `TCP_NODELAY` option on this socket.

For more information about this option, see `set_nodelay`.

# Notes

On Windows make sure the stream is connected before calling this method, by receiving an (writable) event. Trying to get `nodelay` on an unconnected `TcpStream` is undefined behavior.

#### `pub fn set_ttl(&self, ttl: u32) -> Result<()>` [src]

Sets the value for the `IP_TTL` option on this socket.

This value sets the time-to-live field that is used in every packet sent from this socket.

# Notes

On Windows make sure the stream is connected before calling this method, by receiving an (writable) event. Trying to set `ttl` on an unconnected `TcpStream` is undefined behavior.

#### `pub fn ttl(&self) -> Result<u32>` [src]

Gets the value of the `IP_TTL` option for this socket.

For more information about this option, see `set_ttl`.

# Notes

On Windows make sure the stream is connected before calling this method, by receiving an (writable) event. Trying to get `ttl` on an unconnected `TcpStream` is undefined behavior.

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

Get the value of the `SO_ERROR` option on this socket.

This will retrieve the stored error in the underlying socket, clearing the field in the process. This can be useful for checking errors between calls.

#### `pub fn peek(&self, buf: &mut [u8]) -> Result<usize>` [src]

Receives data on the socket from the remote address to which it is connected, without removing that data from the queue. On success, returns the number of bytes peeked.

Successive calls return the same data. This is accomplished by passing `MSG_PEEK` as a flag to the underlying recv system call.

## Trait Implementations

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

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

Extracts the raw file descriptor. Read more

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

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

Formats the value using the given formatter. Read more

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

#### `unsafe fn from_raw_fd(fd: RawFd) -> TcpStreamⓘ

### Notable traits for TcpStream

`impl Read for TcpStreamimpl<'a> Read for &'a TcpStreamimpl Write for TcpStreamimpl<'a> Write for &'a TcpStream`
` [src]

Converts a `RawFd` to a `TcpStream`.

# Notes

The caller is responsible for ensuring that the socket is in non-blocking mode.

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

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

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

### `impl Read for TcpStream` [src]

#### `fn read(&mut self, buf: &mut [u8]) -> Result<usize>` [src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

#### `fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>` [src]

Like `read`, except that it reads into a slice of buffers. Read more

#### `pub fn is_read_vectored(&self) -> bool` [src]

🔬 This is a nightly-only experimental API. (`can_vector`)

Determines if this `Read`er has an efficient `read_vectored` implementation. Read more

#### `pub unsafe fn initializer(&self) -> Initializer` [src]

🔬 This is a nightly-only experimental API. (`read_initializer`)

Determines if this `Read`er can work with buffers of uninitialized memory. Read more

#### `pub fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>`1.0.0 [src]

Read all bytes until EOF in this source, placing them into `buf`. Read more

#### `pub fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>`1.0.0 [src]

Read all bytes until EOF in this source, appending them to `buf`. Read more

#### `pub fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>`1.6.0 [src]

Read the exact number of bytes required to fill `buf`. Read more

#### `pub fn by_ref(&mut self) -> &mut Self` 1.0.0 [src]

Creates a “by reference” adaptor for this instance of `Read`. Read more

#### `pub fn bytes(self) -> Bytes<Self>`1.0.0 [src]

Transforms this `Read` instance to an `Iterator` over its bytes. Read more

#### `pub fn chain<R>(self, next: R) -> Chain<Self, R> where
R: Read,` 1.0.0 [src]

Creates an adaptor which will chain this stream with another. Read more

#### `pub fn take(self, limit: u64) -> Take<Self>`1.0.0 [src]

Creates an adaptor which will read at most `limit` bytes from it. Read more

### `impl<'a> Read for &'a TcpStream` [src]

#### `fn read(&mut self, buf: &mut [u8]) -> Result<usize>` [src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

#### `fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>` [src]

Like `read`, except that it reads into a slice of buffers. Read more

#### `pub fn is_read_vectored(&self) -> bool` [src]

🔬 This is a nightly-only experimental API. (`can_vector`)

Determines if this `Read`er has an efficient `read_vectored` implementation. Read more

#### `pub unsafe fn initializer(&self) -> Initializer` [src]

🔬 This is a nightly-only experimental API. (`read_initializer`)

Determines if this `Read`er can work with buffers of uninitialized memory. Read more

#### `pub fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>`1.0.0 [src]

Read all bytes until EOF in this source, placing them into `buf`. Read more

#### `pub fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>`1.0.0 [src]

Read all bytes until EOF in this source, appending them to `buf`. Read more

#### `pub fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>`1.6.0 [src]

Read the exact number of bytes required to fill `buf`. Read more

#### `pub fn by_ref(&mut self) -> &mut Self` 1.0.0 [src]

Creates a “by reference” adaptor for this instance of `Read`. Read more

#### `pub fn bytes(self) -> Bytes<Self>`1.0.0 [src]

Transforms this `Read` instance to an `Iterator` over its bytes. Read more

#### `pub fn chain<R>(self, next: R) -> Chain<Self, R> where
R: Read,` 1.0.0 [src]

Creates an adaptor which will chain this stream with another. Read more

#### `pub fn take(self, limit: u64) -> Take<Self>`1.0.0 [src]

Creates an adaptor which will read at most `limit` bytes from it. Read more

### `impl Source for TcpStream` [src]

#### `fn register(
&mut self,
registry: &Registry,
token: Token,
interests: Interest
) -> Result<()>` [src]

Register `self` with the given `Registry` instance. Read more

#### `fn reregister(
&mut self,
registry: &Registry,
token: Token,
interests: Interest
) -> Result<()>` [src]

Re-register `self` with the given `Registry` instance. Read more

#### `fn deregister(&mut self, registry: &Registry) -> Result<()>` [src]

Deregister `self` from the given `Registry` instance. Read more

### `impl Write for TcpStream` [src]

#### `fn write(&mut self, buf: &[u8]) -> Result<usize>` [src]

Write a buffer into this writer, returning how many bytes were written. Read more

#### `fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize>` [src]

Like `write`, except that it writes from a slice of buffers. Read more

#### `fn flush(&mut self) -> Result<()>` [src]

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

#### `pub fn is_write_vectored(&self) -> bool` [src]

🔬 This is a nightly-only experimental API. (`can_vector`)

Determines if this `Write`r has an efficient `write_vectored` implementation. Read more

#### `pub fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>`1.0.0 [src]

Attempts to write an entire buffer into this writer. Read more

#### `pub fn write_all_vectored(
&mut self,
bufs: &mut [IoSlice<'_>]
) -> Result<(), Error>` [src]

🔬 This is a nightly-only experimental API. (`write_all_vectored`)

Attempts to write multiple buffers into this writer. Read more

#### `pub fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>`1.0.0 [src]

Writes a formatted string into this writer, returning any error encountered. Read more

#### `pub fn by_ref(&mut self) -> &mut Self` 1.0.0 [src]

Creates a “by reference” adaptor for this instance of `Write`. Read more

### `impl<'a> Write for &'a TcpStream` [src]

#### `fn write(&mut self, buf: &[u8]) -> Result<usize>` [src]

Write a buffer into this writer, returning how many bytes were written. Read more

#### `fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize>` [src]

Like `write`, except that it writes from a slice of buffers. Read more

#### `fn flush(&mut self) -> Result<()>` [src]

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

#### `pub fn is_write_vectored(&self) -> bool` [src]

🔬 This is a nightly-only experimental API. (`can_vector`)

Determines if this `Write`r has an efficient `write_vectored` implementation. Read more

#### `pub fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>`1.0.0 [src]

Attempts to write an entire buffer into this writer. Read more

#### `pub fn write_all_vectored(
&mut self,
bufs: &mut [IoSlice<'_>]
) -> Result<(), Error>` [src]

🔬 This is a nightly-only experimental API. (`write_all_vectored`)

Attempts to write multiple buffers into this writer. Read more

#### `pub fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>`1.0.0 [src]

Writes a formatted string into this writer, returning any error encountered. Read more

#### `pub fn by_ref(&mut self) -> &mut Self` 1.0.0 [src]

Creates a “by reference” adaptor for this instance of `Write`. Read more

## Auto Trait Implementations

### `impl RefUnwindSafe for TcpStream`

### `impl Send for TcpStream`

### `impl Sync for TcpStream`

### `impl Unpin for TcpStream`

### `impl UnwindSafe for TcpStream`

## Blanket Implementations

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

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

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

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

#### `pub fn borrow(&self) -> &T` [src]

Immutably borrows from an owned value. Read more

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

#### `pub fn borrow_mut(&mut self) -> &mut T` [src]

Mutably borrows from an owned value. Read more

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

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

Performs the conversion.

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

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

Performs the conversion.

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

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `pub 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.

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

Performs the conversion.