Project

General

Profile

Feature #20018

Updated by Eregon (Benoit Daloze) 3 months ago

Feature for implementing Happy Eyeballs version 2 (RFC 8305) in `Socket.tcp`. 

 ### Probrem 
 I would like to implement Happy Eyeballs version 2 (RFC 8305) in `Socket.tcp`. 
 In HEv2, `EAI_ADDRFAMILY` and `EAI_AGAIN` should be ignored when `getaddrinfoo` returns them in hostname resolution. However, there is currently no way to ask `SocketError` for errors returned by `getaddrinfo` 

 ### Proposal 
 I opened a PR to get errors when `getaddrinfo` and `getnameinfo` returns them.  

 https://github.com/ruby/ruby/pull/9018 

 Todo this, 
 - I added `Socket::ResolutionError` as a subclass of `SocketError` 
 - I added an attribute of `Socket::ResolutionError` to get error code via `#error_code` `#error_code 
 - I replaced `SocketError` (`rb_eSocket`) with `Socket::ResolutionError` `Socket::ResolutionError (`rb_eResolutionError`) in `rsock_raise_socket_error` because this function is only called when `getaddrinfo` and `getnameinfo` fail 
 - I renamed `rsock_raise_socket_error` to `rock_raise_resolution_error` for the same reason 

 In addition, `Socket::ResolutionError` is a subclass of `SocketError`, so it does not affect `rescue SocketError` in source codes.

Back