LCOV - code coverage report
Current view: top level - libs/utils/src - linux_socket_ioctl.rs (source / functions) Coverage Total Hit
Test: 5445d246133daeceb0507e6cc0797ab7c1c70cb8.info Lines: 0.0 % 17 0
Test Date: 2025-03-12 18:05:02 Functions: 0.0 % 3 0

            Line data    Source code
       1              : //! Linux-specific socket ioctls.
       2              : //!
       3              : //! <https://elixir.bootlin.com/linux/v6.1.128/source/include/uapi/linux/sockios.h#L25-L27>
       4              : 
       5              : use std::io;
       6              : use std::mem::MaybeUninit;
       7              : use std::os::fd::RawFd;
       8              : use std::os::raw::c_int;
       9              : 
      10              : use nix::libc::{FIONREAD, TIOCOUTQ};
      11              : 
      12            0 : unsafe fn do_ioctl(socket_fd: RawFd, cmd: nix::libc::Ioctl) -> io::Result<c_int> {
      13            0 :     let mut inq: MaybeUninit<c_int> = MaybeUninit::uninit();
      14            0 :     // SAFETY: encapsulating fn is unsafe, we require `socket_fd` to be a valid file descriptor
      15            0 :     unsafe {
      16            0 :         let err = nix::libc::ioctl(socket_fd, cmd, inq.as_mut_ptr());
      17            0 :         if err == 0 {
      18            0 :             Ok(inq.assume_init())
      19              :         } else {
      20            0 :             Err(io::Error::last_os_error())
      21              :         }
      22              :     }
      23            0 : }
      24              : 
      25              : /// # Safety
      26              : ///
      27              : /// Caller must ensure that `socket_fd` is a valid TCP socket file descriptor.
      28            0 : pub unsafe fn inq(socket_fd: RawFd) -> io::Result<c_int> {
      29            0 :     // SAFETY: encapsulating fn is unsafe
      30            0 :     unsafe { do_ioctl(socket_fd, FIONREAD) }
      31            0 : }
      32              : 
      33              : /// # Safety
      34              : ///
      35              : /// Caller must ensure that `socket_fd` is a valid TCP socket file descriptor.
      36            0 : pub unsafe fn outq(socket_fd: RawFd) -> io::Result<c_int> {
      37            0 :     // SAFETY: encapsulating fn is unsafe
      38            0 :     unsafe { do_ioctl(socket_fd, TIOCOUTQ) }
      39            0 : }
        

Generated by: LCOV version 2.1-beta