diff options
author | John Hawthorn <john@hawthorn.email> | 2025-08-19 19:13:00 -0700 |
---|---|---|
committer | John Hawthorn <john@hawthorn.email> | 2025-08-20 11:00:03 -0700 |
commit | 5c96bbf36a73e29561b2b1a0e42c6f3341a4e542 (patch) | |
tree | 0c748ab7b50824af1751c8a3bf4836ea86d18e6a /enc/euc_kr.c | |
parent | 9d484e3412750580c85a6950a8304d8ad0b4d8d5 (diff) |
When calling getnameinfo we spawn a thread because it may do a slow,
blocking reverse-DNS lookup. Spawning a thread is relatively fast (~20µs
on my Linux machine) but still an order of magnitude slower than when
getnameinfo is simply translating to a numeric IP or port, which, at
least in my tests on Linux, doesn't even make a syscall.
This commit adds a fast path for when reverse DNS isn't required: either
host isn't being fetched or NI_NUMERICHOST is set AND either the
service name isn't required or NI_NUMERICSERV is set. The service name
should only need to read /etc/services, which should be fast-ish, but
is still I/O so I kept the existing behaviour (it could be on a network
fs I guess).
I tested with:
s = TCPSocket.open("www.ruby-lang.org", 80)
500_000.times { Socket.unpack_sockaddr_in(s.getpeername) }
Before: 12.935s
After: 0.338s
Diffstat (limited to 'enc/euc_kr.c')
0 files changed, 0 insertions, 0 deletions