class Raindrops::TCP_Info
This is used to wrap “struct tcp_info” as described in tcp(7) and /usr/include/linux/tcp.h. The following readers methods are defined corresponding to the “tcpi_” fields in the tcp_info struct.
As of raindrops 0.18.0+, this is supported on FreeBSD and OpenBSD systems as well as Linux
, although not all fields exist or match the documentation, below.
In particular, the last_data_recv
field is useful for measuring the amount of time a client spent in the listen queue before +accept()+, but only if TCP_DEFER_ACCEPT
is used with the listen socket (it is on by default in Unicorn).
-
state
-
ca_state
-
retransmits
-
probes
-
backoff
-
options
-
snd_wscale
-
rcv_wscale
-
rto
-
ato
-
snd_mss
-
rcv_mss
-
unacked
-
sacked
-
lost
-
retrans
-
fackets
-
last_data_sent
-
last_ack_sent
-
last_data_recv
-
last_ack_recv
-
pmtu
-
rcv_ssthresh
-
rtt
-
rttvar
-
snd_ssthresh
-
snd_cwnd
-
advmss
-
reordering
-
rcv_rtt
-
rcv_space
-
total_retrans
Public Class Methods
Source
static VALUE init(VALUE self, VALUE io) { int fd = my_fileno(io); struct tcp_info *info = DATA_PTR(self); socklen_t len = (socklen_t)sizeof(struct tcp_info); int rc = getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &len); if (rc != 0) rb_sys_fail("getsockopt"); return self; }
Raindrops::TCP_Info.new(tcp_socket) -> TCP_Info object
Reads a TCP_Info
object from any given tcp_socket
. See the tcp(7) manpage and /usr/include/linux/tcp.h for more details.
Public Instance Methods
Source
static VALUE init(VALUE self, VALUE io) { int fd = my_fileno(io); struct tcp_info *info = DATA_PTR(self); socklen_t len = (socklen_t)sizeof(struct tcp_info); int rc = getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &len); if (rc != 0) rb_sys_fail("getsockopt"); return self; }
info = Raindrops::TCP_Info.new(tcp_socket) info.get!(tcp_socket)
Update an existing TCP_Info
objects with the latest stats from the given socket. This even allows sharing TCP_Info
objects between different sockets to avoid garbage.