Class UDP

  • All Implemented Interfaces:
    AdditionalJmxObjects, DiagnosticsHandler.ProbeHandler

    public class UDP
    extends TP
    IP multicast transport based on UDP. Messages to the group (msg.dest == null) will be multicast (to all group members), whereas point-to-point messages (msg.dest != null) will be unicast to a single member. Uses a multicast and a unicast socket.

    The following properties are read by the UDP protocol:

    • param mcast_addr - the multicast address to use; default is 228.8.8.8.
    • param mcast_port - (int) the port that the multicast is sent on; default is 7600
    • param ip_mcast - (boolean) flag whether to use IP multicast; default is true.
    • param ip_ttl - the default time-to-live for multicast packets sent out on this socket; default is 8.
    • param use_packet_handler - boolean, defaults to false. If set, the mcast and ucast receiver threads just put the datagram's payload (a byte buffer) into a queue, from where a separate thread will dequeue and handle them (unmarshal and pass up). This frees the receiver threads from having to do message unmarshalling; this time can now be spent receiving packets. If you have lots of retransmissions because of network input buffer overflow, consider setting this property to true.
    Author:
    Bela Ban
    • Field Detail

      • tos

        protected int tos
        Traffic class for sending unicast and multicast datagrams. Valid values are (check DatagramSocket.setTrafficClass(int) ); for details):
        • IPTOS_LOWCOST (0x02), decimal 2
        • IPTOS_RELIABILITY (0x04)<, decimal 4/li>
        • IPTOS_THROUGHPUT (0x08), decimal 8
        • IPTOS_LOWDELAY (0x10), decimal 16
      • mcast_group_addr

        protected java.net.InetAddress mcast_group_addr
      • mcast_port

        protected int mcast_port
      • ip_mcast

        protected boolean ip_mcast
      • ip_ttl

        protected int ip_ttl
      • mcast_send_buf_size

        protected int mcast_send_buf_size
      • mcast_recv_buf_size

        protected int mcast_recv_buf_size
      • ucast_send_buf_size

        protected int ucast_send_buf_size
      • ucast_recv_buf_size

        protected int ucast_recv_buf_size
      • disable_loopback

        protected boolean disable_loopback
      • suppress_time_out_of_buffer_space

        protected long suppress_time_out_of_buffer_space
      • unicast_receiver_threads

        protected int unicast_receiver_threads
      • multicast_receiver_threads

        protected int multicast_receiver_threads
      • mcast_addr

        protected IpAddress mcast_addr
        The multicast address (mcast address and port) this member uses
      • sock

        protected java.net.MulticastSocket sock
        Socket used for
        1. sending unicast and multicast packets and
        2. receiving unicast packets
        The address of this socket will be our local address (local_addr)
      • mcast_sock

        protected java.net.MulticastSocket mcast_sock
        IP multicast socket for receiving multicast packets
      • mcast_receivers

        protected UDP.PacketReceiver[] mcast_receivers
        Runnable to receive multicast packets
      • ucast_receivers

        protected UDP.PacketReceiver[] ucast_receivers
        Runnable to receive unicast packets
      • suppress_log_out_of_buffer_space

        protected SuppressLog<java.net.InetAddress> suppress_log_out_of_buffer_space
      • is_android

        protected static final boolean is_android
      • is_mac

        protected static final boolean is_mac
    • Constructor Detail

      • UDP

        public UDP()
    • Method Detail

      • supportsMulticasting

        public boolean supportsMulticasting()
        Description copied from class: TP
        Whether or not hardware multicasting is supported
        Specified by:
        supportsMulticasting in class TP
      • setMulticasting

        public <T extends UDP> T setMulticasting​(boolean fl)
      • setMulticastAddress

        public <T extends UDP> T setMulticastAddress​(java.net.InetAddress a)
      • getMulticastAddress

        public java.net.InetAddress getMulticastAddress()
      • getMulticastPort

        public int getMulticastPort()
      • setMulticastPort

        public <T extends UDP> T setMulticastPort​(int mcast_port)
      • setMcastPort

        public <T extends UDP> T setMcastPort​(int mcast_port)
      • setMulticastTTL

        public <T extends UDP> T setMulticastTTL​(int ttl)
        Set the ttl for multicast socket
        Parameters:
        ttl - the time to live for the socket.
      • getMulticastTTL

        public int getMulticastTTL()
      • setMaxBundleSize

        public <T extends TP> T setMaxBundleSize​(int size)
        Overrides:
        setMaxBundleSize in class TP
      • getDroppedMessages

        public int getDroppedMessages()
      • clearDroppedMessagesCache

        public <T extends UDP> T clearDroppedMessagesCache()
      • setUcastReceiverThreads

        public <T extends UDP> T setUcastReceiverThreads​(int num)
      • getUcastReceiverThreads

        public int getUcastReceiverThreads()
      • setMcastReceiverThreads

        public <T extends UDP> T setMcastReceiverThreads​(int num)
      • getMcastReceiverThreads

        public int getMcastReceiverThreads()
      • getInfo

        public java.lang.String getInfo()
        Specified by:
        getInfo in class TP
      • sendMulticast

        public void sendMulticast​(byte[] data,
                                  int offset,
                                  int length)
                           throws java.lang.Exception
        Description copied from class: TP
        Send to all members in the group. UDP would use an IP multicast message, whereas TCP would send N messages, one for each member
        Specified by:
        sendMulticast in class TP
        Parameters:
        data - The data to be sent. This is not a copy, so don't modify it
        Throws:
        java.lang.Exception
      • sendUnicast

        public void sendUnicast​(PhysicalAddress dest,
                                byte[] data,
                                int offset,
                                int length)
                         throws java.lang.Exception
        Description copied from class: TP
        Send a unicast to 1 member. Note that the destination address is a *physical*, not a logical address
        Specified by:
        sendUnicast in class TP
        Parameters:
        dest - Must be a non-null unicast address
        data - The data to be sent. This is not a copy, so don't modify it
        Throws:
        java.lang.Exception
      • _send

        protected void _send​(java.net.InetAddress dest,
                             int port,
                             byte[] data,
                             int offset,
                             int length)
                      throws java.lang.Exception
        Throws:
        java.lang.Exception
      • down

        public java.lang.Object down​(Event evt)
        Description copied from class: Protocol
        An event is to be sent down the stack. A protocol may want to examine its type and perform some action on it, depending on the event's type. If the event is a message MSG, then the protocol may need to add a header to it (or do nothing at all) before sending it down the stack using down_prot.down().
        Overrides:
        down in class TP
      • init

        public void init()
                  throws java.lang.Exception
        Description copied from class: Protocol
        Called after instance has been created (null constructor) and before protocol is started. Properties are already set. Other protocols are not yet connected and events cannot yet be sent.
        Overrides:
        init in class TP
        Throws:
        java.lang.Exception - Thrown if protocol cannot be initialized successfully. This will cause the ProtocolStack to fail, so the channel constructor will throw an exception
      • start

        public void start()
                   throws java.lang.Exception
        Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads
        Overrides:
        start in class TP
        Throws:
        java.lang.Exception - Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, so JChannel.connect(String) will throw an exception
      • stop

        public void stop()
        Description copied from class: Protocol
        This method is called on a JChannel.disconnect(). Stops work (e.g. by closing multicast socket). Will be called from top to bottom. This means that at the time of the method invocation the neighbor protocol below is still working. This method will replace the STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that when this method is called all messages in the down queue will have been flushed
        Overrides:
        stop in class TP
      • handleConnect

        protected void handleConnect()
                              throws java.lang.Exception
        Overrides:
        handleConnect in class TP
        Throws:
        java.lang.Exception
      • setCorrectSocketBufferSize

        protected void setCorrectSocketBufferSize​(java.net.MulticastSocket s,
                                                  int buf_size,
                                                  int new_size,
                                                  boolean send,
                                                  boolean mcast)
                                           throws java.net.SocketException
        Throws:
        java.net.SocketException
      • findMethod

        protected static java.lang.reflect.Method findMethod​(java.lang.Class<?> clazz,
                                                             java.lang.String method_name,
                                                             java.lang.Class<?>... parameters)
      • createSockets

        protected void createSockets()
                              throws java.lang.Exception
        Creates the UDP sender and receiver sockets
        Throws:
        java.lang.Exception
      • destroySockets

        protected void destroySockets()
      • createReceivers

        protected UDP.PacketReceiver[] createReceivers​(int num,
                                                       java.net.DatagramSocket sock,
                                                       java.lang.String name)
      • createLocalAddress

        protected IpAddress createLocalAddress()
      • setTimeToLive

        protected <T extends UDP> T setTimeToLive​(int ttl,
                                                  java.net.MulticastSocket s)
      • setInterface

        protected <T extends UDP> T setInterface​(java.net.InetAddress intf,
                                                 java.net.MulticastSocket s)
      • bindToInterfaces

        protected void bindToInterfaces​(java.util.List<java.net.NetworkInterface> interfaces,
                                        java.net.MulticastSocket s,
                                        java.net.InetAddress mcastAddr)
        Parameters:
        interfaces - List. Guaranteed to have no duplicates
        s -
        mcastAddr -
        Throws:
        java.io.IOException
      • createMulticastSocketWithBindPort

        protected java.net.MulticastSocket createMulticastSocketWithBindPort()
                                                                      throws java.lang.Exception
        Creates a DatagramSocket when bind_port > 0. Attempts to allocate the socket with port == bind_port, and increments until it finds a valid port, or until port_range has been exceeded
        Returns:
        DatagramSocket The newly created socket
        Throws:
        java.lang.Exception
      • createMulticastSocket

        protected java.net.MulticastSocket createMulticastSocket​(java.lang.String service_name,
                                                                 int port)
                                                          throws java.lang.Exception
        Throws:
        java.lang.Exception
      • dumpSocketInfo

        protected java.lang.String dumpSocketInfo()
                                           throws java.lang.Exception
        Throws:
        java.lang.Exception
      • setBufferSize

        protected void setBufferSize​(java.net.DatagramSocket sock,
                                     int send_buf_size,
                                     int recv_buf_size)
      • getBufferSize

        protected static int getBufferSize​(java.net.DatagramSocket s,
                                           boolean send)
      • closeUnicastSocket

        protected void closeUnicastSocket()
      • startThreads

        protected void startThreads()
                             throws java.lang.Exception
        Throws:
        java.lang.Exception
      • startUcastReceiverThreads

        protected void startUcastReceiverThreads()
      • startMcastReceiverThreads

        protected void startMcastReceiverThreads()
      • stopThreads

        protected void stopThreads()
      • stopUcastReceiverThreads

        protected void stopUcastReceiverThreads()
      • stopMcastReceiverThreads

        protected void stopMcastReceiverThreads()
      • handleConfigEvent

        protected void handleConfigEvent​(java.util.Map<java.lang.String,​java.lang.Object> map)
                                  throws java.net.SocketException
        Throws:
        java.net.SocketException