raindrops 0.16.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0632eff3853589bfe99f749a3db3d12fa991220a
4
- data.tar.gz: 19c74eeede4492633f1e3b189b24e4a085fbe40f
2
+ SHA256:
3
+ metadata.gz: 6f78e29ec57e3f3710146a423cf60915d23a5f4366d70dcabbbef74fb69f71f3
4
+ data.tar.gz: 8a369d49c33a67af3b6acccaf64b04ed192cba9d163c8d48944cfac887511885
5
5
  SHA512:
6
- metadata.gz: a818ad3da0618365d832b5979de131a6fbafe3737877e4a4e95891b993ae6f0c90fd8938cb60494c95cd8ffaf67dd75a017549878f46739442f2739512f3b272
7
- data.tar.gz: 00b463e110ee126cfbda005af3b6f20c084120428aea74982795b1102dcab9487b461b35834cf3a71885c7d11fea29a3a1596d7f010e93e5210b376c5f6cad96
6
+ metadata.gz: b9e5de8e7a7a84038bbe19a954d3d559ebec3ed4c7f68db2e2ada6373b045f4fbcd784c5d5b91005cad1d87f1db93f9dc31c9f7fc59ae56a7f73b98d9a96bf2e
7
+ data.tar.gz: 9913e9205b2527b9f5bd1bae58b0c2c8962505e87280c06257f603fb722978d6656c99cfa0a297ccd0734a7d6110b0a6ecd5155fec9870ec40a31044a00def4d
data/.document CHANGED
@@ -4,4 +4,4 @@ NEWS
4
4
  lib
5
5
  ext/raindrops/raindrops.c
6
6
  ext/raindrops/linux_inet_diag.c
7
- ext/raindrops/linux_tcp_info.c
7
+ ext/raindrops/tcp_info.c
data/.manifest CHANGED
@@ -18,13 +18,14 @@ examples/linux-listener-stats.rb
18
18
  examples/middleware.ru
19
19
  examples/watcher.ru
20
20
  examples/watcher_demo.ru
21
+ examples/yahns.conf.rb
21
22
  examples/zbatery.conf.rb
22
23
  ext/raindrops/extconf.rb
23
24
  ext/raindrops/linux_inet_diag.c
24
- ext/raindrops/linux_tcp_info.c
25
25
  ext/raindrops/my_fileno.h
26
26
  ext/raindrops/raindrops.c
27
27
  ext/raindrops/raindrops_atomic.h
28
+ ext/raindrops/tcp_info.c
28
29
  lib/raindrops.rb
29
30
  lib/raindrops/aggregate.rb
30
31
  lib/raindrops/aggregate/last_data_recv.rb
@@ -48,11 +49,11 @@ test/test_linux_all_tcp_listen_stats.rb
48
49
  test/test_linux_all_tcp_listen_stats_leak.rb
49
50
  test/test_linux_ipv6.rb
50
51
  test/test_linux_middleware.rb
51
- test/test_linux_tcp_info.rb
52
52
  test/test_middleware.rb
53
53
  test/test_middleware_unicorn.rb
54
54
  test/test_middleware_unicorn_ipv6.rb
55
55
  test/test_raindrops.rb
56
56
  test/test_raindrops_gc.rb
57
57
  test/test_struct.rb
58
+ test/test_tcp_info.rb
58
59
  test/test_watcher.rb
data/.olddoc.yml CHANGED
@@ -1,9 +1,16 @@
1
1
  ---
2
- cgit_url: http://bogomips.org/raindrops.git
3
- git_url: git://bogomips.org/raindrops.git
4
- rdoc_url: http://raindrops.bogomips.org/
5
- public_email: raindrops-public@bogomips.org
6
- private_email: raindrops@bogomips.org
7
- ml_url: http://bogomips.org/raindrops-public/
2
+ cgit_url: https://yhbt.net/raindrops.git/
3
+ rdoc_url: https://yhbt.net/raindrops/
4
+ public_email: raindrops-public@yhbt.net
5
+ ml_url:
6
+ - https://yhbt.net/raindrops-public/
7
+ - http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops-public
8
+ imap_url:
9
+ - imaps://yhbt.net/inbox.comp.lang.ruby.raindrops.0
10
+ - imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops.0
8
11
  nntp_url:
9
- - nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
12
+ - nntps://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
13
+ - nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops
14
+ source_code:
15
+ - git clone https://yhbt.net/raindrops.git
16
+ - torsocks git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops.git
data/GIT-VERSION-FILE CHANGED
@@ -1 +1 @@
1
- GIT_VERSION = 0.16.0
1
+ GIT_VERSION = 0.20.0
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.16.0
4
+ DEF_VER=v0.20.0
5
5
 
6
6
  LF='
7
7
  '
data/GNUmakefile CHANGED
@@ -1,4 +1,4 @@
1
1
  all::
2
- RSYNC_DEST := bogomips.org:/srv/raindrops
2
+ RSYNC_DEST := yhbt.net:/srv/yhbt/raindrops
3
3
  rfpackage := raindrops
4
4
  include pkg.mk
data/LATEST CHANGED
@@ -1,28 +1,10 @@
1
- === raindrops 0.16.0 - minor fixes and workarounds / 2016-02-29 12:36 UTC
1
+ === raindrops 0.20.0 / 2021-12-06 23:41 UTC
2
2
 
3
- There's mainly a fix/workaround for Ruby 2.3 now returning
4
- locale-aware strings for File.readlink and our test suite
5
- using strange paths allowed by *nix.
3
+ Raindrops may now use file-backed mmap() rather than anonymous
4
+ memory. Thanks to KJ Tsanaktsidis for the patch:
6
5
 
7
- https://bugs.ruby-lang.org/issues/12034
6
+ https://yhbt.net/raindrops-public/20211125065618.3432-1-ktsanaktsidis@zendesk.com/T/
8
7
 
9
- tcp_listener_stats won't return "true" object placeholders
10
- if stats are configured for a non-existent listener.
11
-
12
- There are also minor optimizations for Ruby 2.2+ (at the expense
13
- of 2.1 and earlier).
14
-
15
- And the usual round of minor tweaks and doc updates.
16
-
17
- 10 changes since v0.15.0:
18
- gemspec: avoid circular dependency on unicorn
19
- remove optimizations which made sense for older rubies
20
- linux: workaround Ruby 2.3 change
21
- linux: remove Pathname stdlib dependency
22
- add .gitattributes for Ruby method detection
23
- middleware: minor bytecode size reduction
24
- doc: update URLs and references
25
- README: remove indentation from URLs in RDoc
26
- linux: tcp_listener_stats drops "true" placeholders
27
- build: use '--local' domain for dev gem install
8
+ The documentation is also updated to note our mail archives are now
9
+ available via IMAP(S).
28
10
 
data/LICENSE CHANGED
@@ -3,8 +3,8 @@ revision control for names and email addresses of all of them.
3
3
 
4
4
  You can redistribute it and/or modify it under the terms of the GNU
5
5
  Lesser General Public License (LGPL) as published by the Free Software
6
- Foundation, version {2.1}[http://www.gnu.org/licenses/lgpl-2.1.txt] or
7
- later. Currently version {3}[http://www.gnu.org/licenses/lgpl-3.0.txt],
6
+ Foundation, version {2.1}[https://www.gnu.org/licenses/lgpl-2.1.txt] or
7
+ later. Currently version {3}[https://www.gnu.org/licenses/lgpl-3.0.txt],
8
8
  is preferred (see link:COPYING).
9
9
 
10
10
  raindrops is distributed in the hope that it will be useful, but WITHOUT
@@ -13,4 +13,4 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
13
13
  License for more details.
14
14
 
15
15
  You should have received a copy of the GNU Lesser General Public License
16
- along with the raindrops; if not, see <http://www.gnu.org/licenses/>
16
+ along with the raindrops; if not, see <https://www.gnu.org/licenses/>
data/NEWS CHANGED
@@ -1,3 +1,112 @@
1
+ === raindrops 0.20.0 / 2021-12-06 23:41 UTC
2
+
3
+ Raindrops may now use file-backed mmap() rather than anonymous
4
+ memory. Thanks to KJ Tsanaktsidis for the patch:
5
+
6
+ https://yhbt.net/raindrops-public/20211125065618.3432-1-ktsanaktsidis@zendesk.com/T/
7
+
8
+ The documentation is also updated to note our mail archives are now
9
+ available via IMAP(S).
10
+
11
+ === raindrops 0.19.2 / 2021-05-25 23:13 UTC
12
+
13
+ This release fixes compatibility with GC.compact on Ruby 3.x
14
+ when using ListenStats on Linux. The listener stats
15
+ functionality is rarely used and does not affect most users
16
+ who just have raindrops installed for shared atomic counters.
17
+
18
+ === raindrops 0.19.1 / 2020-01-08 09:31 UTC
19
+
20
+ This release fixes some warnings on newer Rubies.
21
+
22
+ We're no longer on bogomips.org since it's due
23
+ for expiry and I can't pay extortionists for a .org, so
24
+ s/bogomips.org/yhbt.net/ for now, and be prepared to move again
25
+ when extortionists move onto extorting the .net TLD.
26
+
27
+ doc: switch homepage to dark216
28
+ ext/raindrops/extconf: fix cflags reset on ancient CC
29
+ fixes for newer rubies
30
+ replace bogomips.org with yhbt.net
31
+
32
+ === raindrops 0.19.0 - Rack 2.x middleware compatibility / 2017-08-09 23:52 UTC
33
+
34
+ This release fixes Rack 2.x compatibility for the few users of
35
+ Raindrops::Middleware
36
+ <https://bogomips.org/raindrops/Raindrops/Middleware.html>.
37
+ Thanks to Dmytro Shteflyuk for this release.
38
+
39
+ No need to upgrade unless you use Raindrops::Middleware with
40
+ Rack 2.x.
41
+
42
+ There's also a few minor, inconsequential cleanups.
43
+
44
+ Dmytro Shteflyuk (1):
45
+ Properly override respond_to? in Raindrops::Middleware::Proxy
46
+
47
+ Eric Wong (2):
48
+ Ruby thread compatibility updates
49
+ tcp_info: remove unnecessary extconf.h include
50
+
51
+ === raindrops 0.18.0 / 2017-03-23 02:44 UTC
52
+
53
+ The most notable feature of this release is the addition of
54
+ FreeBSD and OpenBSD TCP_INFO support. This includes the
55
+ Raindrops::TCP for portably mapping TCP state names to
56
+ platform-dependent numeric values:
57
+
58
+ https://bogomips.org/raindrops/Raindrops.html#TCP
59
+
60
+ Thanks to Jeremy Evans and Simon Eskildsen on the
61
+ unicorn-public@bogomips.org mailing list for inspiring
62
+ these changes to raindrops.
63
+
64
+ There's also a few internal cleanups, and documentation
65
+ improvements, including some fixes to the largely-forgotten
66
+ Raindrops::Aggreage::PMQ class:
67
+
68
+ https://bogomips.org/raindrops/Raindrops/Aggregate/PMQ.html
69
+
70
+ 20 changes since 0.17.0:
71
+
72
+ test_inet_diag_socket: fix Fixnum deprecation warning
73
+ TODO: add item for IPv6 breakage
74
+ ext: fix documentation for C ext-defined classes
75
+ TCP_Info: custom documentation for #get!
76
+ TypedData C-API conversion
77
+ test_watcher: disable test correctly when aggregate is missing
78
+ tcp_info: support this struct under FreeBSD
79
+ define Raindrops::TCP hash for TCP states
80
+ linux_inet_diag: reduce stack usage and simplify
81
+ avoid reading errno repeatedly
82
+ aggregate/pmq: avoid false sharing of lock buffers
83
+ aggregate/pmq: remove io-extra requirement
84
+ aggregate/pmq: avoid File#stat allocation
85
+ Merge remote-tracking branch 'origin/freebsd'
86
+ Merge remote-tracking branch 'origin/aggregate-pmq'
87
+ doc: remove private email support address
88
+ doc: update location of TCP_INFO-related stuff
89
+ build: avoid olddoc for building the RubyGem
90
+ doc: document Raindrops::TCP hash
91
+ aggregate/pmq: update version numbers for Ruby and Linux
92
+
93
+ === raindrops 0.17.0 - rack 2.x updates / 2016-07-31 15:19 UTC
94
+
95
+ This release features minor updates to support rack 2.x
96
+ while maintaining support for rack 1.2 and later.
97
+ As a result, Ruby 1.8.6 compatibility is gone, but
98
+ Ruby 1.8.7 probably still works, for now.
99
+
100
+ There's also a minor warning fix, doc updates, and
101
+ the homepage now supports HTTPS (HTTP remains supported)
102
+
103
+ 5 changes since raindrops 0.16.0:
104
+ drop Rack::Utils.bytesize dependency
105
+ gemspec: bump Rack dependency
106
+ linux_inet_diag: GCC attribute format check
107
+ use HTTPS and move homepage to https://bogomips.org/raindrops/
108
+ examples: add yahns config, zbatery is abandoned
109
+
1
110
  === raindrops 0.16.0 - minor fixes and workarounds / 2016-02-29 12:36 UTC
2
111
 
3
112
  There's mainly a fix/workaround for Ruby 2.3 now returning
data/README CHANGED
@@ -40,7 +40,7 @@ and "tcp_diag" kernel modules are loaded as they do not autoload correctly
40
40
  We recommend GCC 4+ (or compatible) to support the __sync builtins
41
41
  (__sync_{add,sub}_and_fetch()):
42
42
 
43
- http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html
43
+ https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html
44
44
 
45
45
  For non-GCC 4+ users, we also support compilation with the libatomic_ops
46
46
  package starting with Raindrops 0.4.0:
@@ -54,33 +54,24 @@ If you use RubyGems:
54
54
 
55
55
  gem install raindrops
56
56
 
57
- Otherwise grab the latest tarball from:
58
-
59
- http://raindrops.bogomips.org/files/
60
-
61
- Unpack it, and run "ruby setup.rb"
62
-
63
57
  == Usage
64
58
 
65
59
  See Raindrops::Middleware and Raindrops::LastDataRecv documentation for
66
60
  use Rack servers. The entire library is fully-documented and we are
67
- responsive on the mailing list (mailto:raindrops-public@bogomips.org) if
68
- you have any questions or comments.
61
+ responsive on the publicly archived mailbox
62
+ (mailto:raindrops-public@yhbt.net) if you have any questions or comments.
69
63
 
70
64
  == Development
71
65
 
72
66
  You can get the latest source via git from the following locations:
73
67
 
74
- git://bogomips.org/raindrops.git
75
- git://repo.or.cz/raindrops.git (mirror)
68
+ https://yhbt.net/raindrops.git
69
+ http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops.git
70
+ http://repo.or.cz/w/raindrops.git (gitweb mirror)
76
71
 
77
- You may browse the code from the web and download the latest snapshot
78
- tarballs here:
72
+ Snapshots and tarballs are available.
79
73
 
80
- * http://bogomips.org/raindrops.git
81
- * http://repo.or.cz/w/raindrops.git (gitweb)
82
-
83
- Inline patches (from "git format-patch") to the mailing list are
74
+ Inline patches (from "git format-patch") to the mailbox are
84
75
  preferred because they allow code review and comments in the reply to
85
76
  the patch.
86
77
 
@@ -94,9 +85,17 @@ raindrops is licensed under the LGPL-2.1+
94
85
  == Contact
95
86
 
96
87
  All feedback (bug reports, user/development discussion, patches, pull
97
- requests) go to the mailing list: mailto:raindrops-public@bogomips.org
88
+ requests) go to the publicly archived mailbox:
89
+ mailto:raindrops-public@yhbt.net
90
+
91
+ Mail archives are available over HTTP(S), IMAP(S) and NNTP(S):
98
92
 
99
- Mailing list archives are available over HTTP and NNTP:
93
+ * https://yhbt.net/raindrops-public/
94
+ * http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops-public/
95
+ * imaps://yhbt.net/inbox.comp.lang.ruby.raindrops.0
96
+ * imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops.0
97
+ * nntps://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
98
+ * nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops
100
99
 
101
- http://bogomips.org/raindrops-public/
102
- nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
100
+ Since archives are public, scrub sensitive information and
101
+ use anonymity tools such as Tor or Mixmaster if you deem necessary.
data/TODO CHANGED
@@ -1,2 +1,3 @@
1
+ * fix IPv6 inet_diag reporting for Raindrops::Middleware
1
2
  * pure Ruby version for non-forking servers (patches welcome!)
2
3
  * unix_diag and udp_diag support
@@ -15,7 +15,6 @@ end
15
15
  usage = "Usage: #$0 [-d DELAY] [-t QUEUED_THRESHOLD] ADDR..."
16
16
  ARGV.size > 0 or abort usage
17
17
  delay = false
18
- all = false
19
18
  queued_thresh = -1
20
19
  # "normal" exits when driven on the command-line
21
20
  trap(:INT) { exit 130 }
@@ -25,7 +24,7 @@ OptionParser.new('', 24, ' ') do |opts|
25
24
  opts.banner = usage
26
25
  opts.on('-d', '--delay=DELAY', Float) { |n| delay = n }
27
26
  opts.on('-t', '--queued-threshold=INT', Integer) { |n| queued_thresh = n }
28
- opts.on('-a', '--all') { all = true }
27
+ opts.on('-a', '--all') { } # noop
29
28
  opts.parse! ARGV
30
29
  end
31
30
 
@@ -1,5 +1,5 @@
1
1
  # This is a snippet of the config that powers
2
- # http://raindrops-demo.bogomips.org/
2
+ # https://yhbt.net/raindrops-demo/
3
3
  # This may be used with the packaged zbatery.conf.rb
4
4
  #
5
5
  # zbatery -c zbatery.conf.ru watcher_demo.ru -E none
@@ -0,0 +1,30 @@
1
+ # Inlined rack app using yahns server (git clone git://yhbt.net/yahns.git)
2
+ # Usage: yahns -c /path/to/this/file.conf.rb
3
+ # There is no separate config.ru file for this example,
4
+ # but rack_app may also be a string pointing to the path of a
5
+ # config.ru file
6
+
7
+ require 'rack'
8
+ rack_app = Rack::Builder.new do
9
+ use Rack::Head
10
+ addr = %w(0.0.0.0:9418 0.0.0.0:443 [::]:443 0.0.0.0:80 [::]:80
11
+ 127.0.0.1:6081 127.0.0.1:280 0.0.0.0:119 [::]:119)
12
+ use Raindrops::Middleware, listeners: addr
13
+ run Raindrops::Watcher.new(listeners: addr)
14
+ end.to_app
15
+ # rack_app = '/path/to/config.ru' # a more standard config
16
+
17
+ app(:rack, rack_app) do
18
+ # I keep IPv4 and IPv6 on separate sockets to avoid ugly
19
+ # IPv4-mapped-IPv6 addresses:
20
+ listen 8080
21
+ listen '[::]:8080', ipv6only: true
22
+ client_max_body_size 0 # no POST or any uploads
23
+ client_timeout 5
24
+ output_buffering false # needed for /tail/ endpoint to avoid ENOSPC
25
+ queue { worker_threads 30 }
26
+ end
27
+
28
+ # logging is optional, but recommended for diagnosing problems
29
+ # stderr_path '/var/log/yahns/stderr-raindrops.log'
30
+ # stdout_path '/var/log/yahns/stdout-raindrops.log'
@@ -1,6 +1,9 @@
1
1
  # Used for running Raindrops::Watcher, which requires a multi-threaded
2
2
  # Rack server capable of streaming a response. Threads must be used,
3
- # so Zbatery is recommended: http://zbatery.bogomip.org/
3
+ # so any multi-threaded Rack server may be used.
4
+ # zbatery was recommended in the past, but it is abandoned
5
+ # <http://zbatery.bogomip.org/>.
6
+ # yahns may work as an alternative (see yahns.conf.rb in this dir)
4
7
  Rainbows! do
5
8
  use :ThreadSpawn
6
9
  end
@@ -1,4 +1,5 @@
1
1
  require 'mkmf'
2
+ require 'shellwords'
2
3
 
3
4
  dir_config('atomic_ops')
4
5
  have_func('mmap', 'sys/mman.h') or abort 'mmap() not found'
@@ -6,10 +7,112 @@ have_func('munmap', 'sys/mman.h') or abort 'munmap() not found'
6
7
 
7
8
  $CPPFLAGS += " -D_GNU_SOURCE "
8
9
  have_func('mremap', 'sys/mman.h')
9
- have_header('linux/tcp.h')
10
+ headers = %w(sys/types.h netdb.h string.h sys/socket.h netinet/in.h)
11
+ if have_header('linux/tcp.h')
12
+ headers << 'linux/tcp.h'
13
+ else
14
+ %w(netinet/tcp.h netinet/tcp_fsm.h).each { |h|
15
+ have_header(h, headers) and headers << h
16
+ }
17
+ end
10
18
 
11
19
  $CPPFLAGS += " -D_BSD_SOURCE "
20
+
21
+ if have_type("struct tcp_info", headers)
22
+ %w(
23
+ tcpi_state
24
+ tcpi_ca_state
25
+ tcpi_retransmits
26
+ tcpi_probes
27
+ tcpi_backoff
28
+ tcpi_options
29
+ tcpi_snd_wscale
30
+ tcpi_rcv_wscale
31
+ tcpi_rto
32
+ tcpi_ato
33
+ tcpi_snd_mss
34
+ tcpi_rcv_mss
35
+ tcpi_unacked
36
+ tcpi_sacked
37
+ tcpi_lost
38
+ tcpi_retrans
39
+ tcpi_fackets
40
+ tcpi_last_data_sent
41
+ tcpi_last_ack_sent
42
+ tcpi_last_data_recv
43
+ tcpi_last_ack_recv
44
+ tcpi_pmtu
45
+ tcpi_rcv_ssthresh
46
+ tcpi_rtt
47
+ tcpi_rttvar
48
+ tcpi_snd_ssthresh
49
+ tcpi_snd_cwnd
50
+ tcpi_advmss
51
+ tcpi_reordering
52
+ tcpi_rcv_rtt
53
+ tcpi_rcv_space
54
+ tcpi_total_retrans
55
+ tcpi_snd_wnd
56
+ tcpi_snd_bwnd
57
+ tcpi_snd_nxt
58
+ tcpi_rcv_nxt
59
+ tcpi_toe_tid
60
+ tcpi_snd_rexmitpack
61
+ tcpi_rcv_ooopack
62
+ tcpi_snd_zerowin
63
+ ).each do |field|
64
+ cfunc = "tcp_info_#{field}"
65
+ if have_struct_member('struct tcp_info', field, headers)
66
+ func_body = <<EOF
67
+ static VALUE #{cfunc}(VALUE self)
68
+ {
69
+ struct tcp_info *info = DATA_PTR(self);
70
+ return UINT2NUM((uint32_t)info->#{field});
71
+ }
72
+ EOF
73
+ func_body.delete!("\n")
74
+ $defs << "-DCFUNC_#{cfunc}=#{Shellwords.shellescape(func_body)}"
75
+ else
76
+ func_body = "static inline void #{cfunc}(void) {}"
77
+ $defs << "-DCFUNC_#{cfunc}=#{Shellwords.shellescape(func_body)}"
78
+ cfunc = 'rb_f_notimplement'.freeze
79
+ end
80
+ rbmethod = %Q("#{field.sub(/\Atcpi_/, ''.freeze)}")
81
+ $defs << "-DDEFINE_METHOD_tcp_info_#{field}=" \
82
+ "#{Shellwords.shellescape(
83
+ %Q[rb_define_method(cTCP_Info,#{rbmethod},#{cfunc},0)])}"
84
+ end
85
+ tcp_state_map = {
86
+ ESTABLISHED: %w(TCP_ESTABLISHED TCPS_ESTABLISHED),
87
+ SYN_SENT: %w(TCP_SYN_SENT TCPS_SYN_SENT),
88
+ SYN_RECV: %w(TCP_SYN_RECV TCPS_SYN_RECEIVED),
89
+ FIN_WAIT1: %w(TCP_FIN_WAIT1 TCPS_FIN_WAIT_1),
90
+ FIN_WAIT2: %w(TCP_FIN_WAIT2 TCPS_FIN_WAIT_2),
91
+ TIME_WAIT: %w(TCP_TIME_WAIT TCPS_TIME_WAIT),
92
+ CLOSE: %w(TCP_CLOSE TCPS_CLOSED),
93
+ CLOSE_WAIT: %w(TCP_CLOSE_WAIT TCPS_CLOSE_WAIT),
94
+ LAST_ACK: %w(TCP_LAST_ACK TCPS_LAST_ACK),
95
+ LISTEN: %w(TCP_LISTEN TCPS_LISTEN),
96
+ CLOSING: %w(TCP_CLOSING TCPS_CLOSING),
97
+ }
98
+ nstate = 0
99
+ tcp_state_map.each do |state, try|
100
+ try.each do |os_name|
101
+ have_const(os_name, headers) or next
102
+ tcp_state_map[state] = os_name
103
+ nstate += 1
104
+ end
105
+ end
106
+ if nstate == tcp_state_map.size
107
+ $defs << '-DRAINDROPS_TCP_STATES_ALL_KNOWN=1'
108
+ tcp_state_map.each do |state, name|
109
+ $defs << "-DRAINDROPS_TCP_#{state}=#{name}"
110
+ end
111
+ end
112
+ end
113
+
12
114
  have_func("getpagesize", "unistd.h")
115
+ have_func('rb_thread_call_without_gvl')
13
116
  have_func('rb_thread_blocking_region')
14
117
  have_func('rb_thread_io_blocking_region')
15
118
 
@@ -40,7 +143,7 @@ SRC
40
143
  $defs.push(format("-DHAVE_GCC_ATOMIC_BUILTINS"))
41
144
  true
42
145
  else
43
- prev_cflags = $CFLAGS
146
+ $CFLAGS = prev_cflags
44
147
  false
45
148
  end
46
149
  end
@@ -53,4 +156,5 @@ Users of Debian-based distros may run:
53
156
 
54
157
  apt-get install libatomic-ops-dev
55
158
  SRC
159
+ create_header # generate extconf.h to avoid excessively long command-line
56
160
  create_makefile('raindrops_ext')