Sha256: c96f738e0e4af156bc462fbcbfdcf37caa46601311739831da406faf065a82d3

Contents?: true

Size: 1.39 KB

Versions: 35

Compression:

Stored size: 1.39 KB

Contents

require 'socket'

module Libuv
    module Net


        IP_ARGUMENT_ERROR = "ip must be a String".freeze                # Arguments specifying an IP address
        PORT_ARGUMENT_ERROR = "port must be an Integer".freeze          # Arguments specifying an IP port
        INET_ADDRSTRLEN = 16
        INET6_ADDRSTRLEN = 46


        private


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

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

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
libuv-2.0.12 lib/libuv/mixins/net.rb
libuv-2.0.11 lib/libuv/mixins/net.rb
libuv-2.0.10 lib/libuv/mixins/net.rb
libuv-2.0.9 lib/libuv/mixins/net.rb
libuv-2.0.8 lib/libuv/mixins/net.rb
libuv-2.0.6 lib/libuv/mixins/net.rb
libuv-2.0.5 lib/libuv/mixins/net.rb
libuv-2.0.4 lib/libuv/mixins/net.rb
libuv-2.0.3 lib/libuv/mixins/net.rb
libuv-2.0.2 lib/libuv/mixins/net.rb
libuv-2.0.1 lib/libuv/mixins/net.rb
libuv-2.0.0 lib/libuv/mixins/net.rb
libuv-1.3.0 lib/libuv/mixins/net.rb
libuv-1.2.0 lib/libuv/mixins/net.rb
libuv-1.1.3 lib/libuv/mixins/net.rb
libuv-1.1.2 lib/libuv/mixins/net.rb
libuv-1.1.1 lib/libuv/mixins/net.rb
libuv-1.1.0 lib/libuv/mixins/net.rb
libuv-1.0.3 lib/libuv/mixins/net.rb
libuv-1.0.2 lib/libuv/mixins/net.rb