Sha256: ed25c4145de38e98723035a9ea9ea8666b6c2c4dfd2c2573ca5cc7e3d84a8649

Contents?: true

Size: 942 Bytes

Versions: 6

Compression:

Stored size: 942 Bytes

Contents

require 'socket'

module UV
  module Net
    private

    def get_sockaddr_and_len
      sockaddr = FFI::MemoryPointer.new(UV::Sockaddr)
      len = FFI::MemoryPointer.new(:int)
      len.put_int(0, UV::Sockaddr.size)
      [sockaddr, len]
    end

    def get_ip_and_port(sockaddr, len=nil)
      if sockaddr[:sa_family] == Socket::Constants::AF_INET6
        len ||= Socket::Constants::INET6_ADDRSTRLEN
        sockaddr_in6 = UV::SockaddrIn6.new(sockaddr.pointer)
        ip_ptr = FFI::MemoryPointer.new(:char, len)
        UV.ip6_name(sockaddr_in6, ip_ptr, len)
        port = UV.ntohs(sockaddr_in6[:sin6_port])
      else
        len ||= Socket::Constants::INET_ADDRSTRLEN
        sockaddr_in = UV::SockaddrIn.new(sockaddr.pointer)
        ip_ptr = FFI::MemoryPointer.new(:char, len)
        UV.ip4_name(sockaddr_in, ip_ptr, len)
        port = UV.ntohs(sockaddr_in[:sin_port])
      end
      [ip_ptr.read_string, port]
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
uvrb-0.2.0 lib/uv/net.rb
uvrb-0.1.4 lib/uv/net.rb
uvrb-0.1.3 lib/uv/net.rb
uvrb-0.1.2 lib/uv/net.rb
uvrb-0.1.1 lib/uv/net.rb
uvrb-0.1.0 lib/uv/net.rb