Module: RNCP::Networking

Included in:
NcpListener, NcpPusher
Defined in:
lib/rncp/networking.rb

Overview

Contains common networking operations shared between listeners and pushers.

Instance Method Summary collapse

Instance Method Details

#bind_broadcastUDPSocket

Creates a socket that sends and receives via Broadcast address. Returns nil if fails.

Returns:

  • (UDPSocket)

    broadcast socket



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rncp/networking.rb', line 78

def bind_broadcast
  begin
    bsock = UDPSocket.open
    bsock.setsockopt :SOL_SOCKET, :SO_BROADCAST, 1
    bsock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1
    bsock.bind '', RNCP::PORT
    return bsock
  rescue
    puts "[!] Broadcast not supported"
    return nil
  end
end

#bind_multicastUDPSocket

Creates a socket that sends to Multicast group. Returns nil if fails. See #join_multicast to listen for Multicast.

Returns:

  • (UDPSocket)

    multicast socket



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/rncp/networking.rb', line 61

def bind_multicast
  begin
    msock = UDPSocket.open
    msock.setsockopt :IPPROTO_IP, :IP_MULTICAST_TTL, [32].pack("i")
    msock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1 
    msock.bind '', RNCP::PORT
    msock.setsockopt :IPPROTO_IP, :IP_MULTICAST_LOOP, 1
    return msock
  rescue
    puts "[!] Multicast not supported"
    return nil
  end
end

#bind_tcpSocket

Creates a TCP connection to listen for direct connections

Returns:

  • (Socket)

    listening socket



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rncp/networking.rb', line 24

def bind_tcp
  sock = Socket::new Socket::AF_INET, Socket::SOCK_STREAM, 0
  opts = [1].pack("i")
  addr = [Socket::AF_INET, RNCP::PORT, 0, 0, 0, 0, 0, 0]
    .pack("snCCCCNN")

  sock.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, opts
  sock.bind addr
  sock.listen 1
  return sock
end

#join_multicastUDPSocket

Creates a socket bound to the Multicast group. Returns nil if fails. This socket is used to listen for messages sent via Multicast. See #bind_multicast to send.

Returns:

  • (UDPSocket)

    multicast socket



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/rncp/networking.rb', line 40

def join_multicast
  begin
    msock = UDPSocket.new
    membership = IPAddr.new(RNCP::IPV4_GROUP).hton +
                 IPAddr.new("0.0.0.0").hton

    puts "[#] Joining Multicast group"
    msock.setsockopt :IPPROTO_IP, :IP_ADD_MEMBERSHIP, membership
    msock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1 
    msock.bind "0.0.0.0", RNCP::PORT

    return msock
  rescue
    puts "[!] Multicast not supported"
    return nil
  end
end