7b5691c3b0 (master): `Socket.tcp` and `TCPSocket.new` raises `IO::TiemoutError` with user specified timeout (#15602)

2 views
Skip to first unread message

Misaki Shioi

unread,
1:02 AM (12 hours ago) 1:02 AM
to ruby...@g.ruby-lang.org
Misaki Shioi 2025-12-17 06:02:26 +0000 (Wed, 17 Dec 2025)

New Revision: 7b5691c3b0

https://github.com/ruby/ruby/commit/7b5691c3b0

Log:
`Socket.tcp` and `TCPSocket.new` raises `IO::TiemoutError` with user specified timeout (#15602)

* `Socket.tcp` and `TCPSocket.new` raises `IO::TiemoutError` with user specified timeout

In https://github.com/ruby/ruby/pull/11880, `rsock_connect()` was changed to raise `IO::TimeoutError` when a user-specified timeout occurs.
However, when `TCPSocket.new` attempts to connect to multiple destinations, it does not use `rsock_connect()`, and instead raises `Errno::ETIMEDOUT` on timeout.
As a result, the exception class raised on timeout could differ depending on whether there were multiple destinations or not.

To align this behavior with the implementation of `rsock_connect()`, this change makes `TCPSocket.new` raise `IO::TimeoutError` when a user-specified timeout occurs.
Similarly, `Socket.tcp` is updated to raise `IO::TimeoutError` when a timeout occurs within the method.
(Note that the existing behavior of `Addrinfo#connect_internal`, which Socket.tcp depends on internally and which raises `Errno::ETIMEDOUT` on timeout, is not changed.)

* [ruby/net-http] Raise `Net::OpenTimeout` when `TCPSocket.open` raises `IO::TimeoutError`.

With the changes in https://github.com/ruby/ruby/pull/15602, `TCPSocket.open` now raises `IO::TimeoutError` when a user-specified timeout occurs.
This change updates #connect to handle this case accordingly.

https://github.com/ruby/net-http/commit/f64109e1cf

Modified files:
ext/socket/ipsocket.c
ext/socket/lib/socket.rb
lib/net/http.rb
test/socket/test_socket.rb
test/socket/test_tcp.rb
Reply all
Reply to author
Forward
0 new messages