Date | Commit message (Collapse) |
|
This means we can read multiple addresses at once,
even IPv6 ones.
|
|
It's slow, but at least it works.
|
|
No reason to have an extra method. This also speeds up
the multi-listener case for tcp_listener_stats since it
avoids expensive sendmsg() syscalls.
|
|
|
|
netlink is fast and predictable in response times, so permitting
interrupts would just complicate things and lead to errors.
|
|
Fewer places to check for errors, we think.
|
|
Be stricter about invalid inputs.
|
|
This is a work-in-progress and will probably be modified
before the next release.
|
|
64-bit counters are unnecessarily large for tracking
active or queued connections until we have IP_ROFLSCALE
support :>
|
|
Oops :x
|
|
Too hard to maintain.
|
|
We can't have negative values
|
|
We don't care for this address.
|
|
Oops, strings are always true :x
|
|
We're going to experiment with something...
|
|
It's useful, yes.
|
|
Oops, it could give the GC problems.
|
|
This allows limited resizing of the Raindrops memory
area since we always over-allocate due to the required
page aligment for mmap.
It would be nice if mremap() worked with MAP_SHARED,
but it does not and triggers a bus error when attempting
to access the new area.
ref: https://bugzilla.kernel.org/show_bug.cgi?id=8691
|
|
Of course, RDoc doesn't know quantity vs quality :)
|
|
It's more complete for people on ancient systems where
"struct tcp_info" is defined in netinet/tcp and missing
tcp_ircv_rtt, tcpi_rcv_space and tcpi_total_retrans.
|
|
This is the highest number a counter may be incremented to
before it overflows.
|
|
This returns a Raindrops::TCP_Info object
that wraps a tcp_info struct.
|
|
We might reuse that for other code...
|
|
We'll be doing more Linux-only stuff
|
|
inet_diag already supports AF_INET6.
|
|
Acked-by: Eric Wong <normalperson@yhbt.net>
|
|
Nobody uses i386 anymore (especially not with Ruby!),
but some systems like FreeBSD 7.0 still target GCC at
i386 by default, so we force GCC to use a slightly
more modern instruction set and allow it to use
atomic builtins.
|
|
This allows us to build and link correctly on FreeBSD 7.0
|
|
Rubinius does not include macros for accessing
Struct members in the C API.
ref: http://github.com/evanphx/rubinius/issues/494
|
|
Modern glibc can easily return the L1 cache line size with
sysconf(3), so we'll use that and avoid paying a size penalty on
CPUs with smaller cache lines than 128 (every modern x86 except
the idiotic P4).
Additionally, if we detect a single CPU machine, avoid paying
any padding penalty at all.
On machines without the non-portable glibc sysconf(3)
enhancements, we'll continue to operate on the assumption
of an enormous 128 byte cache line size.
|
|
This allows non-GCC 4.x users to experience Raindrops.
|
|
This is only possible during an exit if our invocation of
rb_gc() fails and causes the process to terminate. Otherwise
the GC won't free something that's obviously on the stack.
|
|
"query_addr" is a more appropriate name since we only query one
address at a time via netlink rather than relying on OR-ing in
the bytecode.
|
|
|
|
|