rbs 3.7.0 → 3.8.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|