Skip to content

Commit

Permalink
move loop into Crystal::System
Browse files Browse the repository at this point in the history
  • Loading branch information
HertzDevil committed Sep 2, 2024
1 parent 981c2e9 commit 3d81398
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
13 changes: 13 additions & 0 deletions src/crystal/system/addrinfo.cr
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ module Crystal::System::Addrinfo
# def self.next_addrinfo(addrinfo : Handle) : Handle

# def self.free_addrinfo(addrinfo : Handle)

def self.getaddrinfo(domain, service, family, type, protocol, timeout, & : ::Socket::Addrinfo ->)
addrinfo = root = getaddrinfo(domain, service, family, type, protocol, timeout)

begin
while addrinfo
yield ::Socket::Addrinfo.new(addrinfo)
addrinfo = next_addrinfo(addrinfo)
end
ensure
free_addrinfo(root)
end
end
end

{% if flag?(:wasi) %}
Expand Down
11 changes: 2 additions & 9 deletions src/socket/addrinfo.cr
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,8 @@ class Socket
# > encoding [RFC3490] prior to name lookup.
domain = URI::Punycode.to_ascii domain

addrinfo = root = Crystal::System::Addrinfo.getaddrinfo(domain, service, family, type, protocol, timeout)

begin
while addrinfo
yield new(addrinfo)
addrinfo = Crystal::System::Addrinfo.next_addrinfo(addrinfo)
end
ensure
Crystal::System::Addrinfo.free_addrinfo(root)
Crystal::System::Addrinfo.getaddrinfo(domain, service, family, type, protocol, timeout) do |addrinfo|
yield addrinfo
end
end

Expand Down

0 comments on commit 3d81398

Please sign in to comment.