[][src]Trait gdbstub::Connection

pub trait Connection {
    type Error;
    fn read(&mut self) -> Result<u8, Self::Error>;
fn write(&mut self, byte: u8) -> Result<(), Self::Error>;
fn peek(&mut self) -> Result<Option<u8>, Self::Error>;
fn flush(&mut self) -> Result<(), Self::Error>; fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> { ... }
fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error> { ... }
fn on_session_start(&mut self) -> Result<(), Self::Error> { ... } }

A trait to perform in-order, serial, byte-wise I/O.

When the std feature is enabled, this trait is automatically implemented for TcpStream and UnixStream (on unix systems).

Associated Types

type Error

Transport-specific error type.

Loading content...

Required methods

fn read(&mut self) -> Result<u8, Self::Error>

Read a single byte.

fn write(&mut self, byte: u8) -> Result<(), Self::Error>

Write a single byte.

fn peek(&mut self) -> Result<Option<u8>, Self::Error>

Peek a single byte. This MUST be a non-blocking operation, returning None if no byte is available.

fn flush(&mut self) -> Result<(), Self::Error>

Flush this Connection, ensuring that all intermediately buffered contents reach their destination.

Note: Not all Connections have internal buffering (e.g: writing data to a UART TX register with FIFOs disabled). In these cases, it's fine to simply return Ok(()).

Loading content...

Provided methods

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Self::Error>

Read the exact number of bytes required to fill the buffer.

This method's default implementation calls self.read() for each byte in the buffer. This can be quite inefficient, so if a more efficient implementation exists (such as calling read_exact() on an underlying std::io::Read object), this method should be overwritten.

fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error>

Write the entire buffer, blocking until complete.

This method's default implementation calls self.write() on each byte in the buffer. This can be quite inefficient, so if a more efficient implementation exists (such as calling write_all() on an underlying std::io::Write object), this method should be overwritten.

fn on_session_start(&mut self) -> Result<(), Self::Error>

Called at the start of a debugging session before any GDB packets have been sent/received.

This method's default implementation is a no-op.

Example

The on_session_start implementation for TcpStream ensures that set_nodelay(true) is called. The GDB remote serial protocol requires sending/receiving many small packets, so forgetting to enable TCP_NODELAY can result in a massively degraded debugging experience.

Loading content...

Trait Implementations

impl<E, '_> Connection for &'_ mut dyn Connection<Error = E>[src]

type Error = E

Transport-specific error type.

Implementations on Foreign Types

impl<E> Connection for Box<dyn Connection<Error = E>>[src]

type Error = E

impl Connection for TcpStream[src]

type Error = Error

Loading content...

Implementors

impl<E, '_> Connection for &'_ mut dyn Connection<Error = E>[src]

type Error = E

Loading content...