rbs 3.7.0 → 3.8.0.pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/ruby.yml +7 -7
- data/CHANGELOG.md +52 -0
- data/core/array.rbs +1743 -1580
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +165 -93
- data/core/data.rbs +1 -1
- data/core/dir.rbs +1 -17
- data/core/encoding.rbs +12 -6
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +0 -2
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +2 -2
- data/core/exception.rbs +236 -170
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +32 -74
- data/core/float.rbs +125 -72
- data/core/gc.rbs +138 -40
- data/core/hash.rbs +120 -141
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +97 -144
- data/core/kernel.rbs +290 -200
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/module.rbs +28 -23
- data/core/nil_class.rbs +0 -3
- data/core/numeric.rbs +100 -103
- data/core/object.rbs +0 -4
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +0 -2
- data/core/process.rbs +109 -57
- data/core/ractor.rbs +37 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +234 -33
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +4 -52
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +0 -5
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +0 -5
- data/core/rubygems/version.rbs +6 -6
- data/core/set.rbs +3 -15
- data/core/string.rbs +130 -136
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +127 -50
- data/core/trace_point.rbs +16 -0
- data/core/true_class.rbs +0 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +1 -1
- data/ext/rbs_extension/location.c +29 -19
- data/ext/rbs_extension/parser.c +267 -292
- data/ext/rbs_extension/parserstate.c +56 -22
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +1 -1
- data/lib/rbs/cli.rb +13 -13
- data/lib/rbs/collection/config.rb +3 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
- data/lib/rbs/environment_loader.rb +1 -1
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +2 -2
- data/lib/rbs/prototype/rb.rb +11 -8
- data/lib/rbs/prototype/rbi.rb +9 -5
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +4 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/unit_test/type_assertions.rb +2 -2
- data/lib/rbs/validator.rb +3 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +4 -0
- data/sig/ancestor_graph.rbs +4 -4
- data/sig/namespace.rbs +2 -3
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/type_alias_regularity.rbs +5 -5
- data/sig/typename.rbs +8 -5
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +2 -2
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +47 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/date/0/date.rbs +4 -19
- data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
- data/stdlib/json/0/json.rbs +56 -71
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/net-http/0/net-http.rbs +19 -77
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/openssl.rbs +136 -69
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +1 -2
- data/stdlib/resolv/0/resolv.rbs +8 -3
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +0 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +0 -1
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +49 -25
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +58 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +8 -1
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +11 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +4 -6
data/stdlib/resolv/0/resolv.rbs
CHANGED
|
@@ -292,7 +292,6 @@ class Resolv::DNS
|
|
|
292
292
|
# * Resolv::DNS::Resource::IN::TXT
|
|
293
293
|
# * Resolv::DNS::Resource::IN::WKS
|
|
294
294
|
#
|
|
295
|
-
#
|
|
296
295
|
# Returned resource is represented as a Resolv::DNS::Resource instance, i.e.
|
|
297
296
|
# Resolv::DNS::Resource::IN::A.
|
|
298
297
|
#
|
|
@@ -341,8 +340,10 @@ class Resolv::DNS
|
|
|
341
340
|
#
|
|
342
341
|
# nil
|
|
343
342
|
# : Uses /etc/resolv.conf.
|
|
343
|
+
#
|
|
344
344
|
# String
|
|
345
345
|
# : Path to a file using /etc/resolv.conf's format.
|
|
346
|
+
#
|
|
346
347
|
# Hash
|
|
347
348
|
# : Must contain :nameserver, :search and :ndots keys.
|
|
348
349
|
#
|
|
@@ -355,12 +356,10 @@ class Resolv::DNS
|
|
|
355
356
|
# * :nameserver => '8.8.8.8'
|
|
356
357
|
# * :nameserver => ['8.8.8.8', '8.8.4.4']
|
|
357
358
|
#
|
|
358
|
-
#
|
|
359
359
|
# The value of :nameserver_port should be an array of pair of nameserver address
|
|
360
360
|
# and port number.
|
|
361
361
|
# * :nameserver_port => [['8.8.8.8', 53], ['8.8.4.4', 53]]
|
|
362
362
|
#
|
|
363
|
-
#
|
|
364
363
|
# Example:
|
|
365
364
|
#
|
|
366
365
|
# Resolv::DNS.new(:nameserver => ['210.251.121.21'],
|
|
@@ -594,6 +593,7 @@ class Resolv::DNS::Name
|
|
|
594
593
|
#
|
|
595
594
|
# Name
|
|
596
595
|
# : returns `arg`.
|
|
596
|
+
#
|
|
597
597
|
# String
|
|
598
598
|
# : Creates a new Name.
|
|
599
599
|
#
|
|
@@ -1534,6 +1534,7 @@ class Resolv::IPv6
|
|
|
1534
1534
|
#
|
|
1535
1535
|
# IPv6
|
|
1536
1536
|
# : returns `arg`.
|
|
1537
|
+
#
|
|
1537
1538
|
# String
|
|
1538
1539
|
# : `arg` must match one of the IPv6::Regex* constants
|
|
1539
1540
|
#
|
|
@@ -1617,6 +1618,7 @@ class Resolv::LOC::Alt
|
|
|
1617
1618
|
#
|
|
1618
1619
|
# LOC::Alt
|
|
1619
1620
|
# : returns `arg`.
|
|
1621
|
+
#
|
|
1620
1622
|
# String
|
|
1621
1623
|
# : `arg` must match the LOC::Alt::Regex constant
|
|
1622
1624
|
#
|
|
@@ -1663,6 +1665,7 @@ class Resolv::LOC::Coord
|
|
|
1663
1665
|
#
|
|
1664
1666
|
# LOC::Coord
|
|
1665
1667
|
# : returns `arg`.
|
|
1668
|
+
#
|
|
1666
1669
|
# String
|
|
1667
1670
|
# : `arg` must match the LOC::Coord::Regex constant
|
|
1668
1671
|
#
|
|
@@ -1712,6 +1715,7 @@ class Resolv::LOC::Size
|
|
|
1712
1715
|
#
|
|
1713
1716
|
# LOC::Size
|
|
1714
1717
|
# : returns `arg`.
|
|
1718
|
+
#
|
|
1715
1719
|
# String
|
|
1716
1720
|
# : `arg` must match the LOC::Size::Regex constant
|
|
1717
1721
|
#
|
|
@@ -1782,6 +1786,7 @@ class Resolv::MDNS < Resolv::DNS
|
|
|
1782
1786
|
# nil
|
|
1783
1787
|
# : Uses the default mDNS addresses
|
|
1784
1788
|
#
|
|
1789
|
+
#
|
|
1785
1790
|
# Hash
|
|
1786
1791
|
# : Must contain :nameserver or :nameserver_port like Resolv::DNS#initialize.
|
|
1787
1792
|
#
|
data/stdlib/ripper/0/ripper.rbs
CHANGED
|
@@ -55,13 +55,11 @@
|
|
|
55
55
|
# Inside](http://www.rubyinside.com/using-ripper-to-see-how-ruby-is-parsing-
|
|
56
56
|
# your-code-5270.html)
|
|
57
57
|
#
|
|
58
|
-
#
|
|
59
58
|
# ## Requirements
|
|
60
59
|
#
|
|
61
60
|
# * ruby 1.9 (support CVS HEAD only)
|
|
62
61
|
# * bison 1.28 or later (Other yaccs do not work)
|
|
63
62
|
#
|
|
64
|
-
#
|
|
65
63
|
# ## License
|
|
66
64
|
#
|
|
67
65
|
# Ruby License.
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
# * /dev/urandom
|
|
15
15
|
# * Win32
|
|
16
16
|
#
|
|
17
|
-
#
|
|
18
17
|
# SecureRandom is extended by the Random::Formatter module which defines the
|
|
19
18
|
# following methods:
|
|
20
19
|
#
|
|
@@ -29,7 +28,6 @@
|
|
|
29
28
|
# * urlsafe_base64
|
|
30
29
|
# * uuid
|
|
31
30
|
#
|
|
32
|
-
#
|
|
33
31
|
# These methods are usable as class methods of SecureRandom such as
|
|
34
32
|
# `SecureRandom.hex`.
|
|
35
33
|
#
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
# This module manipulates strings according to the word parsing rules of the
|
|
5
5
|
# UNIX Bourne shell.
|
|
6
6
|
#
|
|
7
|
-
# The shellwords() function was originally a port of shellwords.pl, but
|
|
8
|
-
# to conform to the Shell & Utilities volume of the IEEE Std
|
|
9
|
-
#
|
|
7
|
+
# The `shellwords()` function was originally a port of shellwords.pl, but
|
|
8
|
+
# modified to conform to [the Shell & Utilities volume of the IEEE Std
|
|
9
|
+
# 1003.1-2008, 2016
|
|
10
|
+
# Edition](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.ht
|
|
11
|
+
# ml)
|
|
10
12
|
#
|
|
11
13
|
# ### Usage
|
|
12
14
|
#
|
|
@@ -58,17 +60,9 @@
|
|
|
58
60
|
# * Wakou Aoyama
|
|
59
61
|
# * Akinori MUSHA <knu@iDaemons.org>
|
|
60
62
|
#
|
|
61
|
-
#
|
|
62
63
|
# ### Contact
|
|
63
64
|
# * Akinori MUSHA <knu@iDaemons.org> (current maintainer)
|
|
64
65
|
#
|
|
65
|
-
#
|
|
66
|
-
# ### Resources
|
|
67
|
-
#
|
|
68
|
-
# 1: [IEEE Std 1003.1-2008, 2016 Edition, the Shell & Utilities
|
|
69
|
-
# volume](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.htm
|
|
70
|
-
# l)
|
|
71
|
-
#
|
|
72
66
|
module Shellwords
|
|
73
67
|
# <!--
|
|
74
68
|
# rdoc-file=lib/shellwords.rb
|
|
@@ -77,6 +71,8 @@ module Shellwords
|
|
|
77
71
|
# Escapes a string so that it can be safely used in a Bourne shell command line.
|
|
78
72
|
# `str` can be a non-string object that responds to `to_s`.
|
|
79
73
|
#
|
|
74
|
+
# `str` must not contain NUL characters because of nature of `exec` system call.
|
|
75
|
+
#
|
|
80
76
|
# Note that a resulted string should be used unquoted and is not intended for
|
|
81
77
|
# use in double quotes nor in single quotes.
|
|
82
78
|
#
|
|
@@ -114,7 +110,7 @@ module Shellwords
|
|
|
114
110
|
#
|
|
115
111
|
# All elements are joined into a single string with fields separated by a space,
|
|
116
112
|
# where each element is escaped for the Bourne shell and stringified using
|
|
117
|
-
# `to_s`.
|
|
113
|
+
# `to_s`. See also Shellwords.shellescape.
|
|
118
114
|
#
|
|
119
115
|
# ary = ["There's", "a", "time", "and", "place", "for", "everything"]
|
|
120
116
|
# argv = Shellwords.join(ary)
|
|
@@ -142,6 +138,9 @@ module Shellwords
|
|
|
142
138
|
# argv = Shellwords.split('here are "two words"')
|
|
143
139
|
# argv #=> ["here", "are", "two words"]
|
|
144
140
|
#
|
|
141
|
+
# `line` must not contain NUL characters because of nature of `exec` system
|
|
142
|
+
# call.
|
|
143
|
+
#
|
|
145
144
|
# Note, however, that this is not a command line parser. Shell metacharacters
|
|
146
145
|
# except for the single and double quotes and backslash are not treated as such.
|
|
147
146
|
#
|
|
@@ -642,7 +642,6 @@ class Addrinfo
|
|
|
642
642
|
# * `Socket.sockaddr_in(80, "www.ruby-lang.org")`
|
|
643
643
|
# * `Socket.sockaddr_un("/tmp/sock")`
|
|
644
644
|
#
|
|
645
|
-
#
|
|
646
645
|
# In an AF_INET/AF_INET6 sockaddr array, the 4th element, numeric IP address, is
|
|
647
646
|
# used to construct socket address in the Addrinfo instance. If the 3rd element,
|
|
648
647
|
# textual host name, is non-nil, it is also recorded but used only for
|
|
@@ -82,7 +82,6 @@ class BasicSocket < IO
|
|
|
82
82
|
# (127.0.0.1).
|
|
83
83
|
# * IPv6 unspecified address (::) is replaced by IPv6 loopback address (::1).
|
|
84
84
|
#
|
|
85
|
-
#
|
|
86
85
|
# If the local address is not suitable for connect, SocketError is raised. IPv4
|
|
87
86
|
# and IPv6 address which port is 0 is not suitable for connect. Unix domain
|
|
88
87
|
# socket which has no path is not suitable for connect.
|
|
@@ -202,7 +201,6 @@ class BasicSocket < IO
|
|
|
202
201
|
# Socket::SO_REUSEADDR. A string or symbol of the name, possibly without
|
|
203
202
|
# prefix, is also accepted.
|
|
204
203
|
#
|
|
205
|
-
#
|
|
206
204
|
# ### Examples
|
|
207
205
|
#
|
|
208
206
|
# Some socket options are integers with boolean values, in this case #getsockopt
|
|
@@ -302,7 +300,6 @@ class BasicSocket < IO
|
|
|
302
300
|
# * `buf` - destination String buffer
|
|
303
301
|
# * `options` - keyword hash, supporting `exception: false`
|
|
304
302
|
#
|
|
305
|
-
#
|
|
306
303
|
# ### Example
|
|
307
304
|
# serv = TCPServer.new("127.0.0.1", 0)
|
|
308
305
|
# af, port, host, addr = serv.addr
|
|
@@ -518,10 +515,8 @@ class BasicSocket < IO
|
|
|
518
515
|
# int is passed as for an Integer. Note that `false` must be passed, not
|
|
519
516
|
# `nil`.
|
|
520
517
|
# * String: the string's data and length is passed to the socket.
|
|
521
|
-
#
|
|
522
518
|
# * `socketoption` is an instance of Socket::Option
|
|
523
519
|
#
|
|
524
|
-
#
|
|
525
520
|
# ### Examples
|
|
526
521
|
#
|
|
527
522
|
# Some socket options are integers with boolean values, in this case #setsockopt
|
data/stdlib/socket/0/socket.rbs
CHANGED
|
@@ -22,12 +22,10 @@
|
|
|
22
22
|
# * Socket::PF_UNIX
|
|
23
23
|
# * etc.
|
|
24
24
|
#
|
|
25
|
-
#
|
|
26
25
|
# **type:** The type of communications between the two endpoints, typically
|
|
27
26
|
# * Socket::SOCK_STREAM
|
|
28
27
|
# * Socket::SOCK_DGRAM.
|
|
29
28
|
#
|
|
30
|
-
#
|
|
31
29
|
# **protocol:** Typically *zero*. This may be used to identify a variant of a
|
|
32
30
|
# protocol.
|
|
33
31
|
#
|
|
@@ -37,7 +35,6 @@
|
|
|
37
35
|
# * a zero-length string which specifies INADDR_ANY
|
|
38
36
|
# * an integer (interpreted as binary address in host byte order).
|
|
39
37
|
#
|
|
40
|
-
#
|
|
41
38
|
# ### Quick start
|
|
42
39
|
#
|
|
43
40
|
# Many of the classes, such as TCPSocket, UDPSocket or UNIXSocket, ease the use
|
|
@@ -94,10 +91,13 @@
|
|
|
94
91
|
#
|
|
95
92
|
# TCP client socket
|
|
96
93
|
# : Socket.tcp, TCPSocket.open
|
|
94
|
+
#
|
|
97
95
|
# TCP server socket
|
|
98
96
|
# : Socket.tcp_server_loop, TCPServer.open
|
|
97
|
+
#
|
|
99
98
|
# UNIX client socket
|
|
100
99
|
# : Socket.unix, UNIXSocket.open
|
|
100
|
+
#
|
|
101
101
|
# UNIX server socket
|
|
102
102
|
# : Socket.unix_server_loop, UNIXServer.open
|
|
103
103
|
#
|
|
@@ -108,7 +108,6 @@
|
|
|
108
108
|
# * Sam Roberts
|
|
109
109
|
# * *Programming Ruby* from The Pragmatic Bookshelf.
|
|
110
110
|
#
|
|
111
|
-
#
|
|
112
111
|
# Much material in this documentation is taken with permission from *Programming
|
|
113
112
|
# Ruby* from The Pragmatic Bookshelf.
|
|
114
113
|
#
|
|
@@ -180,7 +179,6 @@ class Socket < BasicSocket
|
|
|
180
179
|
# cannot be released since gethostbyname() is not thread safe.)
|
|
181
180
|
# * This method uses gethostbyname() function already removed from POSIX.
|
|
182
181
|
#
|
|
183
|
-
#
|
|
184
182
|
# This method obtains the host information for *address*.
|
|
185
183
|
#
|
|
186
184
|
# p Socket.gethostbyaddr([221,186,184,68].pack("CCCC"))
|
|
@@ -209,7 +207,6 @@ class Socket < BasicSocket
|
|
|
209
207
|
# cannot be released since gethostbyname() is not thread safe.)
|
|
210
208
|
# * This method uses gethostbyname() function already removed from POSIX.
|
|
211
209
|
#
|
|
212
|
-
#
|
|
213
210
|
# This method obtains the host information for *hostname*.
|
|
214
211
|
#
|
|
215
212
|
# p Socket.gethostbyname("hal") #=> ["localhost", ["hal"], 2, "\x7F\x00\x00\x01"]
|
|
@@ -281,7 +278,6 @@ class Socket < BasicSocket
|
|
|
281
278
|
# * 3-elements array such as ["AF_INET", 80, "127.0.0.1"]
|
|
282
279
|
# * 4-elements array such as ["AF_INET", 80, ignored, "127.0.0.1"]
|
|
283
280
|
#
|
|
284
|
-
#
|
|
285
281
|
# *flags* should be bitwise OR of Socket::NI_* constants.
|
|
286
282
|
#
|
|
287
283
|
# Note: The last form is compatible with IPSocket#addr and IPSocket#peeraddr.
|
|
@@ -462,13 +458,33 @@ class Socket < BasicSocket
|
|
|
462
458
|
# -->
|
|
463
459
|
# creates a new socket object connected to host:port using TCP/IP.
|
|
464
460
|
#
|
|
461
|
+
# Starting from Ruby 3.4, this method operates according to the Happy Eyeballs
|
|
462
|
+
# Version 2 ([RFC 8305](https://datatracker.ietf.org/doc/html/rfc8305))
|
|
463
|
+
# algorithm by default.
|
|
464
|
+
#
|
|
465
|
+
# To make it behave the same as in Ruby 3.3 and earlier, explicitly specify the
|
|
466
|
+
# option `fast_fallback:false`.
|
|
467
|
+
#
|
|
465
468
|
# If local_host:local_port is given, the socket is bound to it.
|
|
466
469
|
#
|
|
467
470
|
# The optional last argument *opts* is options represented by a hash. *opts* may
|
|
468
471
|
# have following options:
|
|
469
472
|
#
|
|
473
|
+
# :resolv_timeout
|
|
474
|
+
# : Specifies the timeout in seconds from when the hostname resolution starts.
|
|
475
|
+
#
|
|
470
476
|
# :connect_timeout
|
|
471
|
-
# :
|
|
477
|
+
# : This method sequentially attempts connecting to all candidate destination
|
|
478
|
+
# addresses.
|
|
479
|
+
# The `connect_timeout` specifies the timeout in seconds from the start of
|
|
480
|
+
# the connection attempt to the last candidate.
|
|
481
|
+
# By default, all connection attempts continue until the timeout occurs.
|
|
482
|
+
# When `fast_fallback:false` is explicitly specified,
|
|
483
|
+
# a timeout is set for each connection attempt and any connection attempt
|
|
484
|
+
# that exceeds its timeout will be canceled.
|
|
485
|
+
#
|
|
486
|
+
# :fast_fallback
|
|
487
|
+
# : Enables the Happy Eyeballs Version 2 algorithm (enabled by default).
|
|
472
488
|
#
|
|
473
489
|
#
|
|
474
490
|
# If a block is given, the block is called with the socket. The value of the
|
|
@@ -482,6 +498,31 @@ class Socket < BasicSocket
|
|
|
482
498
|
# puts sock.read
|
|
483
499
|
# }
|
|
484
500
|
#
|
|
501
|
+
# ### Happy Eyeballs Version 2
|
|
502
|
+
# Happy Eyeballs Version 2 ([RFC
|
|
503
|
+
# 8305](https://datatracker.ietf.org/doc/html/rfc8305)) is an algorithm designed
|
|
504
|
+
# to improve client socket connectivity.
|
|
505
|
+
# It aims for more reliable and efficient connections by performing hostname
|
|
506
|
+
# resolution and connection attempts in parallel, instead of serially.
|
|
507
|
+
#
|
|
508
|
+
# Starting from Ruby 3.4, this method operates as follows with this algorithm:
|
|
509
|
+
#
|
|
510
|
+
# 1. Start resolving both IPv6 and IPv4 addresses concurrently.
|
|
511
|
+
# 2. Start connecting to the one of the addresses that are obtained first.
|
|
512
|
+
# If IPv4 addresses are obtained first, the method waits 50 ms for IPv6 name
|
|
513
|
+
# resolution to prioritize IPv6 connections.
|
|
514
|
+
# 3. After starting a connection attempt, wait 250 ms for the connection to be
|
|
515
|
+
# established.
|
|
516
|
+
# If no connection is established within this time, a new connection is
|
|
517
|
+
# started every 250 ms
|
|
518
|
+
# until a connection is established or there are no more candidate
|
|
519
|
+
# addresses.
|
|
520
|
+
# (Although RFC 8305 strictly specifies sorting addresses,
|
|
521
|
+
# this method only alternates between IPv6 / IPv4 addresses due to the
|
|
522
|
+
# performance concerns)
|
|
523
|
+
# 4. Once a connection is established, all remaining connection attempts are
|
|
524
|
+
# canceled.
|
|
525
|
+
#
|
|
485
526
|
def self.tcp: (String host, Integer port, ?String local_host, ?Integer local_port, ?resolv_timeout: Time::_Timeout, ?connect_timeout: Time::_Timeout) -> instance
|
|
486
527
|
| (String host, Integer port, ?String local_host, ?Integer local_port, ?resolv_timeout: Time::_Timeout, ?connect_timeout: Time::_Timeout) { (instance) -> void } -> void
|
|
487
528
|
|
|
@@ -832,7 +873,6 @@ class Socket < BasicSocket
|
|
|
832
873
|
# * `local_sockaddr` - the `struct` sockaddr contained in a string or an
|
|
833
874
|
# Addrinfo object
|
|
834
875
|
#
|
|
835
|
-
#
|
|
836
876
|
# ### Example
|
|
837
877
|
# require 'socket'
|
|
838
878
|
#
|
|
@@ -873,7 +913,6 @@ class Socket < BasicSocket
|
|
|
873
913
|
# * Errno::EOPNOTSUPP - the socket type of the `socket` does not support
|
|
874
914
|
# binding to an address
|
|
875
915
|
#
|
|
876
|
-
#
|
|
877
916
|
# On unix-based based systems if the address family of the calling `socket` is
|
|
878
917
|
# Socket::AF_UNIX the follow exceptions may be raised if the call to *bind*
|
|
879
918
|
# fails:
|
|
@@ -892,7 +931,6 @@ class Socket < BasicSocket
|
|
|
892
931
|
# *sockaddr* is not a directory
|
|
893
932
|
# * Errno::EROFS - the name would reside on a read only filesystem
|
|
894
933
|
#
|
|
895
|
-
#
|
|
896
934
|
# ### Windows Exceptions
|
|
897
935
|
# On Windows systems the following system exceptions may be raised if the call
|
|
898
936
|
# to *bind* fails:
|
|
@@ -908,7 +946,6 @@ class Socket < BasicSocket
|
|
|
908
946
|
# * Errno::ENOBUFS - no buffer space is available
|
|
909
947
|
# * Errno::ENOTSOCK - the `socket` argument does not refer to a socket
|
|
910
948
|
#
|
|
911
|
-
#
|
|
912
949
|
# ### See
|
|
913
950
|
# * bind manual pages on unix-based systems
|
|
914
951
|
# * bind function in Microsoft's Winsock functions reference
|
|
@@ -926,7 +963,6 @@ class Socket < BasicSocket
|
|
|
926
963
|
# * `remote_sockaddr` - the `struct` sockaddr contained in a string or
|
|
927
964
|
# Addrinfo object
|
|
928
965
|
#
|
|
929
|
-
#
|
|
930
966
|
# ### Example:
|
|
931
967
|
# # Pull down Google's web page
|
|
932
968
|
# require 'socket'
|
|
@@ -981,7 +1017,6 @@ class Socket < BasicSocket
|
|
|
981
1017
|
# * Errno::ETIMEDOUT - the attempt to connect timed out before a connection
|
|
982
1018
|
# was made.
|
|
983
1019
|
#
|
|
984
|
-
#
|
|
985
1020
|
# On unix-based systems if the address family of the calling `socket` is AF_UNIX
|
|
986
1021
|
# the follow exceptions may be raised if the call to *connect* fails:
|
|
987
1022
|
# * Errno::EIO - an i/o error occurred while reading from or writing to the
|
|
@@ -995,7 +1030,6 @@ class Socket < BasicSocket
|
|
|
995
1030
|
# * Errno::ENOTDIR - a component of the path prefix of the pathname in
|
|
996
1031
|
# *sockaddr* is not a directory
|
|
997
1032
|
#
|
|
998
|
-
#
|
|
999
1033
|
# ### Windows Exceptions
|
|
1000
1034
|
# On Windows systems the following system exceptions may be raised if the call
|
|
1001
1035
|
# to *connect* fails:
|
|
@@ -1028,7 +1062,6 @@ class Socket < BasicSocket
|
|
|
1028
1062
|
# * Errno::EACCES - the attempt to connect the datagram socket to the
|
|
1029
1063
|
# broadcast address failed
|
|
1030
1064
|
#
|
|
1031
|
-
#
|
|
1032
1065
|
# ### See
|
|
1033
1066
|
# * connect manual pages on unix-based systems
|
|
1034
1067
|
# * connect function in Microsoft's Winsock functions reference
|
|
@@ -1102,7 +1135,6 @@ class Socket < BasicSocket
|
|
|
1102
1135
|
# ### Parameter
|
|
1103
1136
|
# * `backlog` - the maximum length of the queue for pending connections.
|
|
1104
1137
|
#
|
|
1105
|
-
#
|
|
1106
1138
|
# ### Example 1
|
|
1107
1139
|
# require 'socket'
|
|
1108
1140
|
# include Socket::Constants
|
|
@@ -1139,7 +1171,6 @@ class Socket < BasicSocket
|
|
|
1139
1171
|
# * Errno::ENOBUFS - insufficient resources are available in the system to
|
|
1140
1172
|
# complete the call
|
|
1141
1173
|
#
|
|
1142
|
-
#
|
|
1143
1174
|
# ### Windows Exceptions
|
|
1144
1175
|
# On Windows systems the following system exceptions may be raised if the call
|
|
1145
1176
|
# to *listen* fails:
|
|
@@ -1159,7 +1190,6 @@ class Socket < BasicSocket
|
|
|
1159
1190
|
# * Errno::EOPNOTSUPP - the referenced `socket` is not a type that supports
|
|
1160
1191
|
# the *listen* method
|
|
1161
1192
|
#
|
|
1162
|
-
#
|
|
1163
1193
|
# ### See
|
|
1164
1194
|
# * listen manual pages on unix-based systems
|
|
1165
1195
|
# * listen function in Microsoft's Winsock functions reference
|
|
@@ -1180,7 +1210,6 @@ class Socket < BasicSocket
|
|
|
1180
1210
|
# * `maxlen` - the maximum number of bytes to receive from the socket
|
|
1181
1211
|
# * `flags` - zero or more of the `MSG_` options
|
|
1182
1212
|
#
|
|
1183
|
-
#
|
|
1184
1213
|
# ### Example
|
|
1185
1214
|
# # In one file, start this first
|
|
1186
1215
|
# require 'socket'
|
|
@@ -1236,7 +1265,6 @@ class Socket < BasicSocket
|
|
|
1236
1265
|
# * Errno::ETIMEDOUT - the connection timed out during connection
|
|
1237
1266
|
# establishment or due to a transmission timeout on an active connection
|
|
1238
1267
|
#
|
|
1239
|
-
#
|
|
1240
1268
|
# ### Windows Exceptions
|
|
1241
1269
|
# On Windows systems the following system exceptions may be raised if the call
|
|
1242
1270
|
# to *recvfrom* fails:
|
|
@@ -1298,7 +1326,6 @@ class Socket < BasicSocket
|
|
|
1298
1326
|
# * `outbuf` - destination String buffer
|
|
1299
1327
|
# * `opts` - keyword hash, supporting `exception: false`
|
|
1300
1328
|
#
|
|
1301
|
-
#
|
|
1302
1329
|
# ### Example
|
|
1303
1330
|
# # In one file, start this first
|
|
1304
1331
|
# require 'socket'
|
|
@@ -4122,7 +4149,6 @@ class Socket::AncillaryData
|
|
|
4122
4149
|
# * Socket::AF_UNIX, "AF_UNIX", "UNIX", :AF_UNIX, :UNIX
|
|
4123
4150
|
# * etc.
|
|
4124
4151
|
#
|
|
4125
|
-
#
|
|
4126
4152
|
# *cmsg_level* should be an integer, a string or a symbol.
|
|
4127
4153
|
# * Socket::SOL_SOCKET, "SOL_SOCKET", "SOCKET", :SOL_SOCKET and :SOCKET
|
|
4128
4154
|
# * Socket::IPPROTO_IP, "IP" and :IP
|
|
@@ -4130,7 +4156,6 @@ class Socket::AncillaryData
|
|
|
4130
4156
|
# * Socket::IPPROTO_TCP, "TCP" and :TCP
|
|
4131
4157
|
# * etc.
|
|
4132
4158
|
#
|
|
4133
|
-
#
|
|
4134
4159
|
# *cmsg_type* should be an integer, a string or a symbol. If a string/symbol is
|
|
4135
4160
|
# specified, it is interpreted depend on *cmsg_level*.
|
|
4136
4161
|
# * Socket::SCM_RIGHTS, "SCM_RIGHTS", "RIGHTS", :SCM_RIGHTS, :RIGHTS for
|
|
@@ -4139,7 +4164,6 @@ class Socket::AncillaryData
|
|
|
4139
4164
|
# * Socket::IPV6_PKTINFO, "PKTINFO" and :PKTINFO for IPPROTO_IPV6
|
|
4140
4165
|
# * etc.
|
|
4141
4166
|
#
|
|
4142
|
-
#
|
|
4143
4167
|
# *cmsg_data* should be a string.
|
|
4144
4168
|
#
|
|
4145
4169
|
# p Socket::AncillaryData.new(:INET, :TCP, :NODELAY, "")
|
|
@@ -91,7 +91,6 @@ class TCPServer < TCPSocket
|
|
|
91
91
|
# ### Parameter
|
|
92
92
|
# * `backlog` - the maximum length of the queue for pending connections.
|
|
93
93
|
#
|
|
94
|
-
#
|
|
95
94
|
# ### Example 1
|
|
96
95
|
# require 'socket'
|
|
97
96
|
# include Socket::Constants
|
|
@@ -128,7 +127,6 @@ class TCPServer < TCPSocket
|
|
|
128
127
|
# * Errno::ENOBUFS - insufficient resources are available in the system to
|
|
129
128
|
# complete the call
|
|
130
129
|
#
|
|
131
|
-
#
|
|
132
130
|
# ### Windows Exceptions
|
|
133
131
|
# On Windows systems the following system exceptions may be raised if the call
|
|
134
132
|
# to *listen* fails:
|
|
@@ -148,7 +146,6 @@ class TCPServer < TCPSocket
|
|
|
148
146
|
# * Errno::EOPNOTSUPP - the referenced `socket` is not a type that supports
|
|
149
147
|
# the *listen* method
|
|
150
148
|
#
|
|
151
|
-
#
|
|
152
149
|
# ### See
|
|
153
150
|
# * listen manual pages on unix-based systems
|
|
154
151
|
# * listen function in Microsoft's Winsock functions reference
|
|
@@ -27,7 +27,6 @@ class TCPSocket < IPSocket
|
|
|
27
27
|
# cannot be released since gethostbyname() is not thread safe.)
|
|
28
28
|
# * This method uses gethostbyname() function already removed from POSIX.
|
|
29
29
|
#
|
|
30
|
-
#
|
|
31
30
|
# This method lookups host information by *hostname*.
|
|
32
31
|
#
|
|
33
32
|
# TCPSocket.gethostbyname("localhost")
|
|
@@ -38,9 +37,65 @@ class TCPSocket < IPSocket
|
|
|
38
37
|
private
|
|
39
38
|
|
|
40
39
|
# <!--
|
|
41
|
-
# rdoc-file=
|
|
42
|
-
# - new(
|
|
40
|
+
# rdoc-file=ext/socket/tcpsocket.c
|
|
41
|
+
# - TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil, resolv_timeout: nil, connect_timeout: nil, fast_fallback: true)
|
|
43
42
|
# -->
|
|
43
|
+
# Opens a TCP connection to `remote_host` on `remote_port`. If `local_host` and
|
|
44
|
+
# `local_port` are specified, then those parameters are used on the local end to
|
|
45
|
+
# establish the connection.
|
|
46
|
+
#
|
|
47
|
+
# Starting from Ruby 3.4, this method operates according to the Happy Eyeballs
|
|
48
|
+
# Version 2 ([RFC 8305](https://datatracker.ietf.org/doc/html/rfc8305))
|
|
49
|
+
# algorithm by default, except on Windows.
|
|
50
|
+
#
|
|
51
|
+
# To make it behave the same as in Ruby 3.3 and earlier, explicitly specify the
|
|
52
|
+
# option `fast_fallback:false`.
|
|
53
|
+
#
|
|
54
|
+
# Happy Eyeballs Version 2 is not provided on Windows, and it behaves the same
|
|
55
|
+
# as in Ruby 3.3 and earlier.
|
|
56
|
+
#
|
|
57
|
+
# :resolv_timeout
|
|
58
|
+
# : Specifies the timeout in seconds from when the hostname resolution starts.
|
|
59
|
+
#
|
|
60
|
+
# :connect_timeout
|
|
61
|
+
# : This method sequentially attempts connecting to all candidate destination
|
|
62
|
+
# addresses.
|
|
63
|
+
# The `connect_timeout` specifies the timeout in seconds from the start of
|
|
64
|
+
# the connection attempt to the last candidate.
|
|
65
|
+
# By default, all connection attempts continue until the timeout occurs.
|
|
66
|
+
# When `fast_fallback:false` is explicitly specified,
|
|
67
|
+
# a timeout is set for each connection attempt and any connection attempt
|
|
68
|
+
# that exceeds its timeout will be canceled.
|
|
69
|
+
#
|
|
70
|
+
# :fast_fallback
|
|
71
|
+
# : Enables the Happy Eyeballs Version 2 algorithm (enabled by default).
|
|
72
|
+
#
|
|
73
|
+
#
|
|
74
|
+
# ### Happy Eyeballs Version 2
|
|
75
|
+
# Happy Eyeballs Version 2 ([RFC
|
|
76
|
+
# 8305](https://datatracker.ietf.org/doc/html/rfc8305)) is an algorithm designed
|
|
77
|
+
# to improve client socket connectivity.
|
|
78
|
+
# It aims for more reliable and efficient connections by performing hostname
|
|
79
|
+
# resolution and connection attempts in parallel, instead of serially.
|
|
80
|
+
#
|
|
81
|
+
# Starting from Ruby 3.4, this method operates as follows with this algorithm
|
|
82
|
+
# except on Windows:
|
|
83
|
+
#
|
|
84
|
+
# 1. Start resolving both IPv6 and IPv4 addresses concurrently.
|
|
85
|
+
# 2. Start connecting to the one of the addresses that are obtained first.
|
|
86
|
+
# If IPv4 addresses are obtained first, the method waits 50 ms for IPv6 name
|
|
87
|
+
# resolution to prioritize IPv6 connections.
|
|
88
|
+
# 3. After starting a connection attempt, wait 250 ms for the connection to be
|
|
89
|
+
# established.
|
|
90
|
+
# If no connection is established within this time, a new connection is
|
|
91
|
+
# started every 250 ms
|
|
92
|
+
# until a connection is established or there are no more candidate
|
|
93
|
+
# addresses.
|
|
94
|
+
# (Although RFC 8305 strictly specifies sorting addresses,
|
|
95
|
+
# this method only alternates between IPv6 / IPv4 addresses due to the
|
|
96
|
+
# performance concerns)
|
|
97
|
+
# 4. Once a connection is established, all remaining connection attempts are
|
|
98
|
+
# canceled.
|
|
44
99
|
#
|
|
45
100
|
def initialize: (String remote_host, Integer remote_port, ?String local_host, ?Integer local_port) -> untyped
|
|
46
101
|
end
|
|
@@ -69,7 +69,6 @@ class UNIXServer < UNIXSocket
|
|
|
69
69
|
# ### Parameter
|
|
70
70
|
# * `backlog` - the maximum length of the queue for pending connections.
|
|
71
71
|
#
|
|
72
|
-
#
|
|
73
72
|
# ### Example 1
|
|
74
73
|
# require 'socket'
|
|
75
74
|
# include Socket::Constants
|
|
@@ -106,7 +105,6 @@ class UNIXServer < UNIXSocket
|
|
|
106
105
|
# * Errno::ENOBUFS - insufficient resources are available in the system to
|
|
107
106
|
# complete the call
|
|
108
107
|
#
|
|
109
|
-
#
|
|
110
108
|
# ### Windows Exceptions
|
|
111
109
|
# On Windows systems the following system exceptions may be raised if the call
|
|
112
110
|
# to *listen* fails:
|
|
@@ -126,7 +124,6 @@ class UNIXServer < UNIXSocket
|
|
|
126
124
|
# * Errno::EOPNOTSUPP - the referenced `socket` is not a type that supports
|
|
127
125
|
# the *listen* method
|
|
128
126
|
#
|
|
129
|
-
#
|
|
130
127
|
# ### See
|
|
131
128
|
# * listen manual pages on unix-based systems
|
|
132
129
|
# * listen function in Microsoft's Winsock functions reference
|