Struct Socket

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

Raw socket

Implementations§

Source§

impl Socket

Source

pub fn new(family: c_int, _type: c_int, protocol: c_int) -> Result<Socket>

Initializes new socket.

Corresponds to C connect()

Source

pub fn raw(&self) -> c_int

Returns underlying socket descriptor.

Note: ownership is not transferred.

Source

pub fn name(&self) -> Result<SocketAddr>

Retrieves socket name i.e. address

Wraps getsockname()

Available for binded/connected sockets.

Source

pub fn bind(&self, addr: &SocketAddr) -> Result<()>

Binds socket to address.

Source

pub fn listen(&self, backlog: c_int) -> Result<()>

Listens for incoming connections on this socket.

Source

pub fn recv(&self, buf: &mut [u8], flags: c_int) -> Result<usize>

Receives some bytes from socket

Number of received bytes is returned on success

Source

pub fn recv_from( &self, buf: &mut [u8], flags: c_int, ) -> Result<(usize, SocketAddr)>

Receives some bytes from socket

Number of received bytes and remote address are returned on success.

Source

pub fn send(&self, buf: &[u8], flags: c_int) -> Result<usize>

Sends some bytes through socket.

Number of sent bytes is returned.

Source

pub fn send_to( &self, buf: &[u8], peer_addr: &SocketAddr, flags: c_int, ) -> Result<usize>

Sends some bytes through socket toward specified peer.

Number of sent bytes is returned.

Note: the socket will be bound, if it isn’t already. Use method name to determine address.

Source

pub fn accept4(&self, flags: AcceptFlags) -> Result<(Socket, SocketAddr)>

Accept a new incoming client connection and return its files descriptor and address.

By default the newly created socket will be inheritable by child processes and created in blocking I/O mode. This behaviour can be customized using the flags parameter:

  • AcceptFlags::NON_BLOCKING – Mark the newly created socket as non-blocking
  • AcceptFlags::NON_INHERITABLE – Mark the newly created socket as not inheritable by client processes

Depending on the operating system’s availability of the accept4(2) system call this call either pass the flags on to the operating system or emulate the call using accept(2).

Source

pub fn accept(&self) -> Result<(Socket, SocketAddr)>

Accept a new incoming client connection and return its files descriptor and address.

As this uses the classic accept(2) system call internally, you are strongly advised to use the .accept4() method instead to get defined blocking and inheritance semantics for the created file descriptor.

Source

pub fn connect(&self, addr: &SocketAddr) -> Result<()>

Connects socket with remote address.

Source

pub fn get_opt<T>(&self, level: c_int, name: c_int) -> Result<T>

Retrieves socket option.

Source

pub fn set_opt<T>(&self, level: c_int, name: c_int, value: T) -> Result<()>

Sets socket option

Value is generally integer or C struct.

Source

pub fn ioctl(&self, request: c_ulong, value: c_ulong) -> Result<()>

Sets I/O parameters of socket.

Source

pub fn set_blocking(&self, value: bool) -> Result<()>

Sets non-blocking mode.

Source

pub fn set_inheritable(&self, value: bool) -> Result<()>

Sets whether this socket will be inherited by newly created processes or not.

Internally this is implemented by calling fcntl(fd, F_GETFD) and fcntl(fd, F_SETFD) to update the FD_CLOEXEC flag. (In the future this might use ioctl(2) on some platforms instead.)

This means that the socket will still be available to forked off child processes until it calls execve(2) to complete the creation of a new process. A forking server application (or similar) should therefore not expect this flag to have any effect on spawned off workers; you’re advised to manually call .close() on the socket instance in the worker process instead. The standard library’s std::process facility is not impacted by this however.

Source

pub fn get_inheritable(&self) -> Result<bool>

Returns whether this will be inherited by newly created processes or not.

See set_inheritable for a detailed description of what this means.

Source

pub fn shutdown(&self, direction: ShutdownType) -> Result<()>

Stops receive and/or send over socket.

Source

pub fn close(&self) -> Result<()>

Closes socket.

Note: on Drop socket will be closed on its own. There is no need to close it explicitly.

Trait Implementations§

Source§

impl AsRawFd for Socket

Source§

fn as_raw_fd(&self) -> c_int

Extracts the raw file descriptor. Read more
Source§

impl Drop for Socket

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl FromRawFd for Socket

Source§

unsafe fn from_raw_fd(sock: c_int) -> Self

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

impl IntoRawFd for Socket

Source§

fn into_raw_fd(self) -> c_int

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

Auto Trait Implementations§

§

impl Freeze for Socket

§

impl RefUnwindSafe for Socket

§

impl Send for Socket

§

impl Sync for Socket

§

impl Unpin for Socket

§

impl UnwindSafe for Socket

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, 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.