pub struct Socket { /* private fields */ }
Expand description
Raw socket
Implementations§
Source§impl Socket
impl Socket
Sourcepub fn new(family: c_int, _type: c_int, protocol: c_int) -> Result<Socket>
pub fn new(family: c_int, _type: c_int, protocol: c_int) -> Result<Socket>
Initializes new socket.
Corresponds to C connect()
Sourcepub fn raw(&self) -> c_int
pub fn raw(&self) -> c_int
Returns underlying socket descriptor.
Note: ownership is not transferred.
Sourcepub fn name(&self) -> Result<SocketAddr>
pub fn name(&self) -> Result<SocketAddr>
Retrieves socket name i.e. address
Wraps getsockname()
Available for binded/connected sockets.
Sourcepub fn bind(&self, addr: &SocketAddr) -> Result<()>
pub fn bind(&self, addr: &SocketAddr) -> Result<()>
Binds socket to address.
Sourcepub fn listen(&self, backlog: c_int) -> Result<()>
pub fn listen(&self, backlog: c_int) -> Result<()>
Listens for incoming connections on this socket.
Sourcepub fn recv(&self, buf: &mut [u8], flags: c_int) -> Result<usize>
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
Sourcepub fn recv_from(
&self,
buf: &mut [u8],
flags: c_int,
) -> Result<(usize, SocketAddr)>
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.
Sourcepub fn send(&self, buf: &[u8], flags: c_int) -> Result<usize>
pub fn send(&self, buf: &[u8], flags: c_int) -> Result<usize>
Sends some bytes through socket.
Number of sent bytes is returned.
Sourcepub fn send_to(
&self,
buf: &[u8],
peer_addr: &SocketAddr,
flags: c_int,
) -> Result<usize>
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.
Sourcepub fn accept4(&self, flags: AcceptFlags) -> Result<(Socket, SocketAddr)>
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-blockingAcceptFlags::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)
.
Sourcepub fn accept(&self) -> Result<(Socket, SocketAddr)>
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.
Sourcepub fn connect(&self, addr: &SocketAddr) -> Result<()>
pub fn connect(&self, addr: &SocketAddr) -> Result<()>
Connects socket with remote address.
Sourcepub fn set_opt<T>(&self, level: c_int, name: c_int, value: T) -> Result<()>
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.
Sourcepub fn ioctl(&self, request: c_ulong, value: c_ulong) -> Result<()>
pub fn ioctl(&self, request: c_ulong, value: c_ulong) -> Result<()>
Sets I/O parameters of socket.
Sourcepub fn set_blocking(&self, value: bool) -> Result<()>
pub fn set_blocking(&self, value: bool) -> Result<()>
Sets non-blocking mode.
Sourcepub fn set_inheritable(&self, value: bool) -> Result<()>
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.
Sourcepub fn get_inheritable(&self) -> Result<bool>
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.
Sourcepub fn shutdown(&self, direction: ShutdownType) -> Result<()>
pub fn shutdown(&self, direction: ShutdownType) -> Result<()>
Stops receive and/or send over socket.