Struct Connection

Source
pub struct Connection { /* private fields */ }
Expand description

Send and receive Frame values from a remote peer.

When implementing networking protocols, a message on that protocol is often composed of several smaller messages known as frames. The purpose of Connection is to read and write frames on the underlying TcpStream.

To read frames, the Connection uses an internal buffer, which is filled up until there are enough bytes to create a full frame. Once this happens, the Connection creates the frame and returns it to the caller.

When sending frames, the frame is first encoded into the write buffer. The contents of the write buffer are then written to the socket.

Implementations§

Source§

impl Connection

Source

pub fn new(socket: TcpStream) -> Connection

Create a new Connection, backed by socket. Read and write buffers are initialized.

Source

pub async fn read_frame(&mut self) -> Result<Option<Frame>>

Read a single Frame value from the underlying stream.

The function waits until it has retrieved enough data to parse a frame. Any data remaining in the read buffer after the frame has been parsed is kept there for the next call to read_frame.

§Returns

On success, the received frame is returned. If the TcpStream is closed in a way that doesn’t break a frame in half, it returns None. Otherwise, an error is returned.

Source

pub async fn write_frame(&mut self, frame: &Frame) -> Result<()>

Write a single Frame value to the underlying stream.

The Frame value is written to the socket using the various write_* functions provided by AsyncWrite. Calling these functions directly on a TcpStream is not advised, as this will result in a large number of syscalls. However, it is fine to call these functions on a buffered write stream. The data will be written to the buffer. Once the buffer is full, it is flushed to the underlying socket.

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.