ruby/ext/socket
Misaki Shioi 3be1baab82
Introduce a timeout to prevent rb_thread_fd_select from hanging with write(2) failure (#12457)
Rarely, there are cases where a write(2) call from a child thread
to notify the main thread of the completion of name resolution fails.
If this happens while the main thread is waiting in `rb_thread_fd_select`,
rb_thread_fd_select may not notice that the name resolution has completed and end up hanging.

This issue becomes a problem when there are no sockets currently being connected,
no addresses ready for immediate connection attempts,
and name resolution has already completed for one address family
while the main thread is waiting for the name resolution of the other address family.
(If name resolution is not completed for either address family,
the chances of write(2) failing in both child threads are likely low.)

To avoid this issue, a timeout is introduced to rb_thread_fd_select under the above conditions.
This way, even if the issue occurs,
the completion of name resolution should still be detected
in the subsequent `if (!resolution_store.is_all_finished) ...` block.
2024-12-25 03:06:02 +09:00
..
lib [DOC] Fix broken parameter display and see links for Socket 2024-12-16 10:07:39 +09:00
.document
addrinfo.h Expand tabs [ci skip] 2022-07-21 09:42:04 -07:00
ancdata.c Move directives outside rb_ary_new3 call 2024-10-10 11:30:37 +09:00
basicsocket.c Update BasicSocket to use rb_io_blocking_region. 2024-10-09 21:05:01 +13:00
constants.c Expand tabs [ci skip] 2022-07-21 09:42:04 -07:00
depend ruby tool/update-deps --fix 2024-04-27 21:55:28 +09:00
extconf.rb Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls for outgoing conns" 2024-02-01 11:09:54 +11:00
getaddrinfo.c Don't check for null pointer in calls to free 2023-06-30 09:13:31 -04:00
getnameinfo.c Expand tabs [ci skip] 2022-07-21 09:42:04 -07:00
ifaddr.c Expand tabs [ci skip] 2022-07-21 09:42:04 -07:00
init.c Improve doc for Socket::ResolutionError (#12434) 2024-12-23 15:05:00 +09:00
ipsocket.c Introduce a timeout to prevent rb_thread_fd_select from hanging with write(2) failure (#12457) 2024-12-25 03:06:02 +09:00
mkconstants.rb Drop support for old ERB 2024-03-03 00:55:45 +09:00
option.c Add support for sockaddr_un on Windows. (#6513) 2022-11-17 14:50:25 -08:00
raddrinfo.c Wrap do_fast_fallback_getaddrinfo with rb_thread_prevent_fork (#12366) 2024-12-18 09:48:26 +09:00
rubysocket.h Wrap do_fast_fallback_getaddrinfo with rb_thread_prevent_fork (#12366) 2024-12-18 09:48:26 +09:00
socket.c Fix broken links to Socket.tcp_fast_fallback= 2024-12-15 15:36:08 +09:00
sockport.h
sockssocket.c [Feature #120782] Introduction of Happy Eyeballs Version 2 (RFC8305) in TCPSocket.new (#11653) 2024-11-12 10:06:48 +09:00
tcpserver.c [Feature #120782] Introduction of Happy Eyeballs Version 2 (RFC8305) in TCPSocket.new (#11653) 2024-11-12 10:06:48 +09:00
tcpsocket.c Fix broken links to Socket.tcp_fast_fallback= 2024-12-15 15:36:08 +09:00
udpsocket.c Support IO#timeout for rsock_connect. (#11880) 2024-10-12 10:08:34 +13:00
unixserver.c Add support for sockaddr_un on Windows. (#6513) 2022-11-17 14:50:25 -08:00
unixsocket.c Support IO#timeout for rsock_connect. (#11880) 2024-10-12 10:08:34 +13:00