FYI -- also did a super rudimentary timing.  For 10,000 resolutions it took sub 0.5 seconds across 4 runs.  Imprecise micro-benchmark on a fast machine that should be taken with a grain of salt, but I think that it's generally OK.

```shell
irb(main):010:0> def timeit
irb(main):011:1>   t1 = Time.now
irb(main):012:1>   result = (0..10000).each { |i| Socket.gethostname }
irb(main):013:1>   delta = Time.now - t1
irb(main):014:1>   puts delta
irb(main):015:1> end
=> nil
irb(main):016:0> require 'Socket'
=> true
irb(main):017:0> timeit
0.408025
=> nil
irb(main):018:0> timeit
0.436044
=> nil
irb(main):019:0> timeit
0.463165
=> nil
irb(main):020:0> timeit
0.399048
=> nil
```