diff --git a/proxmox/src/sys/linux/mod.rs b/proxmox/src/sys/linux/mod.rs index ee616a38..ccd710c9 100644 --- a/proxmox/src/sys/linux/mod.rs +++ b/proxmox/src/sys/linux/mod.rs @@ -6,6 +6,7 @@ pub mod magic; pub mod pid; pub mod procfs; pub mod pty; +pub mod socket; pub mod tty; /// Get pseudo random data (/dev/urandom) diff --git a/proxmox/src/sys/linux/socket.rs b/proxmox/src/sys/linux/socket.rs new file mode 100644 index 00000000..6c63c3c2 --- /dev/null +++ b/proxmox/src/sys/linux/socket.rs @@ -0,0 +1,21 @@ +use std::os::unix::io::RawFd; + +use nix::sys::socket::sockopt::{KeepAlive, TcpKeepIdle}; +use nix::sys::socket::setsockopt; + +/// Set TCP keepalive time on a socket +/// +/// See "man 7 tcp" for details. +/// +/// The default on Linux is 7200 (2 hours) which is far too long for +/// many of our use cases. +pub fn set_tcp_keepalive( + socket_fd: RawFd, + tcp_keepalive_time: u32, +) -> nix::Result<()> { + + setsockopt(socket_fd, KeepAlive, &true)?; + setsockopt(socket_fd, TcpKeepIdle, &tcp_keepalive_time)?; + + Ok(()) +}