Package org.jgroups.protocols
Class UDP
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- org.jgroups.protocols.TP
-
- org.jgroups.protocols.UDP
-
- All Implemented Interfaces:
Lifecycle
,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 239.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
UDP.PacketReceiver
-
Field Summary
Fields Modifier and Type Field Description protected boolean
disable_loopback
protected boolean
ip_mcast
protected int
ip_ttl
protected static boolean
is_android
protected static boolean
is_mac
protected IpAddress
mcast_addr
The multicast address (mcast address and port) this member usesprotected java.net.InetAddress
mcast_group_addr
protected static java.lang.String
MCAST_NAME
protected int
mcast_port
protected UDP.PacketReceiver[]
mcast_receivers
Runnable to receive multicast packetsprotected int
mcast_recv_buf_size
protected int
mcast_send_buf_size
protected java.net.MulticastSocket
mcast_sock
IP multicast socket for receiving multicast packetsprotected int
multicast_receiver_threads
protected java.net.MulticastSocket
sock
Socket used for sending unicast and multicast packets and receiving unicast packets The address of this socket will be our local address (local_addr)protected SuppressLog<java.net.InetAddress>
suppress_log_out_of_buffer_space
protected long
suppress_time_out_of_buffer_space
protected int
tos
Traffic class for sending unicast and multicast datagrams.protected static java.lang.String
UCAST_NAME
protected UDP.PacketReceiver[]
ucast_receivers
Runnable to receive unicast packetsprotected int
ucast_recv_buf_size
protected int
ucast_send_buf_size
protected int
unicast_receiver_threads
-
Fields inherited from class org.jgroups.protocols.TP
async_executor, bind_addr, bind_port, bundler, bundler_type, cluster_name, connectLock, diag_handler, external_addr, external_port, header, is_trace, last_discovery_request, LIST, local_physical_addr, local_transport, local_transport_class, log_discard_msgs, log_discard_msgs_version, logical_addr_cache, logical_addr_cache_expiration, logical_addr_cache_max_size, logical_addr_cache_reaper, logical_addr_cache_reaper_interval, loopback_copy, loopback_separate_thread, members, message_processing_policy, MIN_WAIT_BETWEEN_DISCOVERIES, msg_factory, msg_factory_class, MSG_OVERHEAD, msg_processing_policy, msg_stats, MULTICAST, port_range, print_function, receive_interfaces, receive_on_all_interfaces, rtt, socket_factory, suppress_log_different_cluster, suppress_log_different_version, suppress_time_different_cluster_warnings, suppress_time_different_version_warnings, thread_factory, thread_naming_pattern, thread_pool, time_service, time_service_interval, timer, timer_handle_non_blocking_tasks, use_virtual_threads, view, who_has_cache, who_has_cache_timeout
-
Fields inherited from class org.jgroups.stack.Protocol
after_creation_hook, down_prot, ergonomics, id, local_addr, log, policies, stack, stats, up_prot
-
-
Constructor Summary
Constructors Constructor Description UDP()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
_send(java.net.InetAddress dest, int port, byte[] data, int offset, int length)
<T extends UDP>
TclearDroppedMessagesCache()
protected void
closeUnicastSocket()
protected IpAddress
createLocalAddress()
protected java.net.MulticastSocket
createMulticastSocket(java.lang.String service_name, int port)
protected java.net.MulticastSocket
createMulticastSocketWithBindPort()
Creates a DatagramSocket when bind_port > 0.protected UDP.PacketReceiver[]
createReceivers(int num, java.net.DatagramSocket sock, java.lang.String name)
protected void
createSockets()
Creates the UDP sender and receiver socketsprotected void
destroySockets()
boolean
disableLoopback()
UDP
disableLoopback(boolean d)
java.lang.Object
down(Event evt)
An event is to be sent down the stack.protected java.lang.String
dumpSocketInfo()
protected static java.lang.reflect.Method
findMethod(java.lang.Class<?> clazz, java.lang.String method_name, java.lang.Class<?>... parameters)
protected static int
getBufferSize(java.net.DatagramSocket s, boolean send)
int
getDroppedMessages()
java.lang.String
getInfo()
int
getIpTTL()
java.net.InetAddress
getMcastGroupAddr()
int
getMcastReceiverThreads()
int
getMcastRecvBufSize()
int
getMcastSendBufSize()
java.net.InetAddress
getMulticastAddress()
int
getMulticastPort()
int
getMulticastTTL()
protected PhysicalAddress
getPhysicalAddress()
long
getSuppressTimeOutOfBufferSpace()
int
getTos()
int
getUcastReceiverThreads()
int
getUcastRecvBufSize()
int
getUcastSendBufSize()
protected void
handleConfigEvent(java.util.Map<java.lang.String,java.lang.Object> map)
protected void
handleConnect()
void
init()
Called after a protocol has been created and before the protocol is started.boolean
ipMcast()
UDP
ipMcast(boolean i)
protected void
joinGroupOnInterfaces(java.util.List<java.net.NetworkInterface> interfaces, java.net.MulticastSocket s, java.net.InetAddress mcast_addr)
Joins a multicast address on all interfacesvoid
sendToAll(byte[] data, int offset, int length)
Fetches the physical addrs for all mbrs and sends the msg to each physical address.void
sendUnicast(PhysicalAddress dest, byte[] data, int offset, int length)
Send a unicast to a member.protected void
setBufferSize(java.net.DatagramSocket sock, int send_buf_size, int recv_buf_size)
protected void
setCorrectSocketBufferSize(java.net.MulticastSocket s, int buf_size, int new_size, boolean send, boolean mcast)
UDP
setIpTTL(int i)
UDP
setMcastGroupAddr(java.net.InetAddress m)
<T extends UDP>
TsetMcastReceiverThreads(int num)
UDP
setMcastRecvBufSize(int m)
UDP
setMcastSendBufSize(int m)
<T extends UDP>
TsetMulticastAddress(java.net.InetAddress a)
<T extends UDP>
TsetMulticasting(boolean fl)
<T extends UDP>
TsetMulticastPort(int mcast_port)
<T extends UDP>
TsetMulticastTTL(int ttl)
Set the ttl for multicast socketprotected <T extends UDP>
TsetNetworkInterface(java.net.InetAddress addr, java.net.MulticastSocket s)
UDP
setSuppressTimeOutOfBufferSpace(long s)
protected <T extends UDP>
TsetTimeToLive(int ttl, java.net.MulticastSocket s)
UDP
setTos(int t)
<T extends UDP>
TsetUcastReceiverThreads(int num)
UDP
setUcastRecvBufSize(int u)
UDP
setUcastSendBufSize(int u)
void
start()
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threadsprotected void
startMcastReceiverThreads()
protected void
startThreads()
protected void
startUcastReceiverThreads()
void
stop()
Called on aJChannel.disconnect()
; stops work (e.g.protected void
stopMcastReceiverThreads()
protected void
stopThreads()
protected void
stopUcastReceiverThreads()
boolean
supportsMulticasting()
Whether hardware multicasting is supported-
Methods inherited from class org.jgroups.protocols.TP
_send, addPhysicalAddressToCache, addPhysicalAddressToCache, bundler, clearDifferentClusterCache, clearDifferentVersionCache, clearLogicalAddressCache, createBundler, createDiagnosticsHandler, defaultHeaders, destroy, disableDiagnostics, doSend, down, dumpTimerTasks, enableBlockingTimerTasks, enableDiagnostics, enableStats, evictLogicalAddressCache, evictLogicalAddressCache, fetchLocalAddresses, fetchPhysicalAddrs, fetchResponsesFromDiscoveryProtocol, getAllPhysicalAddressesFromCache, getAsyncExecutor, getBindAddr, getBindAddress, getBindPort, getBundler, getBundlerClass, getBundlerType, getClusterName, getClusterNameAscii, getDiagnosticsHandler, getDifferentClusterMessages, getDifferentVersionMessages, getExternalAddr, getExternalPort, getLocalPhysicalAddress, getLocalTransport, getLogDiscardMessages, getLogDiscardMessagesVersion, getLogicalAddrCacheExpiration, getLogicalAddrCacheMaxSize, getLogicalAddrCacheReaperInterval, getLogicalAddressCache, getMessageFactory, getMessageFactoryClass, getMessageProcessingPolicy, getMessageStats, getMsgFactoryClass, getNumberOfThreadDumps, getNumMcastMsgsReceived, getNumMcastMsgsSent, getNumRejectedMsgs, getNumThreads, getNumTimerTasks, getNumUcastMsgsReceived, getNumUcastMsgsSent, getPhysicalAddressFromCache, getPortRange, getReceiveInterfaces, getRTT, getSocketFactory, getSuppressTimeDifferentClusterWarnings, getSuppressTimeDifferentVersionWarnings, getThreadFactory, getThreadNamingPattern, getThreadPool, getTimer, getTimerClass, getTimerThreads, getTimeService, getTimeServiceInterval, getWhoHasCacheTimeout, handleDisconnect, handleMessageBatch, handleProbe, handleSingleMessage, isLogicalAddressCacheReaperRunning, isMulticastCapable, isReceiveOnAllInterfaces, isTrace, isTrace, localPhysicalAddress, logDiscardMsgs, logDiscardMsgs, logDiscardMsgsVersion, logDiscardMsgsVersion, loggerType, loopback, loopbackCopy, loopbackCopy, loopbackSeparateThread, loopbackSeparateThread, passBatchUp, passMessageUp, printLogicalAddressCache, printWhoHasCache, processBatch, receive, receive, receiveOnAllInterfaces, receiveOnAllInterfaces, registerLocalAddress, registerProbeHandler, removeCancelledTimerTasks, removeLogicalAddressFromCache, resetStats, sameCluster, sendTo, setAddress, setAsyncExecutor, setBindAddr, setBindAddress, setBindPort, setBindToAllInterfaces, setBundler, setBundlerType, setDiagnosticsHandler, setExternalAddr, setExternalPort, setInAllThreadFactories, setLevel, setLocalTransport, setLocalTransport, setLogDiscardMessages, setLogDiscardMessagesVersion, setLogicalAddrCacheExpiration, setLogicalAddrCacheMaxSize, setLogicalAddrCacheReaperInterval, setMessageFactory, setMessageProcessingPolicy, setMsgFactoryClass, setPortRange, setSocketFactory, setSourceAddress, setSuppressTimeDifferentClusterWarnings, setSuppressTimeDifferentVersionWarnings, setThreadFactory, setThreadNames, setThreadPool, setTimer, setTimeService, setTimeServiceInterval, setWhoHasCacheTimeout, startDiagnostics, stopDiagnostics, supportedKeys, timestamp, toString, unicastDestMismatch, unregisterProbeHandler, unsetThreadNames, useVirtualThreads, useVirtualThreads, versionMatch, view
-
Methods inherited from class org.jgroups.stack.Protocol
accept, addPolicy, addr, addr, afterCreationHook, down, getAddress, getComponents, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getLog, getName, getPolicies, getProtocolStack, getTransport, getUpProtocol, getUpServices, getValue, isErgonomics, level, parse, policies, providedDownServices, providedUpServices, removePolicy, requiredDownServices, requiredUpServices, resetStatistics, setDownProtocol, setErgonomics, setId, setPolicies, setProtocolStack, setUpProtocol, setValue, statsEnabled, up, up, up
-
-
-
-
Field Detail
-
tos
protected int tos
Traffic class for sending unicast and multicast datagrams. Valid values are (checkDatagramSocket.setTrafficClass(int)
); for details):IPTOS_LOWCOST (0x02)
, decimal 2IPTOS_RELIABILITY (0x04)
<, decimal 4/li>IPTOS_THROUGHPUT (0x08)
, decimal 8IPTOS_LOWDELAY (0x10)
, decimal 16
-
UCAST_NAME
protected static final java.lang.String UCAST_NAME
- See Also:
- Constant Field Values
-
MCAST_NAME
protected static final java.lang.String MCAST_NAME
- See Also:
- Constant Field Values
-
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- sending unicast and multicast packets and
- receiving unicast packets
-
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
-
-
Method Detail
-
supportsMulticasting
public boolean supportsMulticasting()
Description copied from class:TP
Whether hardware multicasting is supported- Specified by:
supportsMulticasting
in classTP
-
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)
-
getTos
public int getTos()
-
setTos
public UDP setTos(int t)
-
getMcastGroupAddr
public java.net.InetAddress getMcastGroupAddr()
-
setMcastGroupAddr
public UDP setMcastGroupAddr(java.net.InetAddress m)
-
ipMcast
public boolean ipMcast()
-
ipMcast
public UDP ipMcast(boolean i)
-
getIpTTL
public int getIpTTL()
-
setIpTTL
public UDP setIpTTL(int i)
-
getMcastSendBufSize
public int getMcastSendBufSize()
-
setMcastSendBufSize
public UDP setMcastSendBufSize(int m)
-
getMcastRecvBufSize
public int getMcastRecvBufSize()
-
setMcastRecvBufSize
public UDP setMcastRecvBufSize(int m)
-
getUcastSendBufSize
public int getUcastSendBufSize()
-
setUcastSendBufSize
public UDP setUcastSendBufSize(int u)
-
getUcastRecvBufSize
public int getUcastRecvBufSize()
-
setUcastRecvBufSize
public UDP setUcastRecvBufSize(int u)
-
disableLoopback
public boolean disableLoopback()
-
disableLoopback
public UDP disableLoopback(boolean d)
-
getSuppressTimeOutOfBufferSpace
public long getSuppressTimeOutOfBufferSpace()
-
setSuppressTimeOutOfBufferSpace
public UDP setSuppressTimeOutOfBufferSpace(long s)
-
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()
-
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()
-
sendToAll
public void sendToAll(byte[] data, int offset, int length) throws java.lang.Exception
Description copied from class:TP
Fetches the physical addrs for all mbrs and sends the msg to each physical address. Asks discovery for missing members' physical addresses if needed
-
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 a member. Note that the destination address is a *physical*, not a logical address- Specified by:
sendUnicast
in classTP
- Parameters:
dest
- Must be a non-null unicast addressdata
- 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 usingdown_prot.down()
.
-
init
public void init() throws java.lang.Exception
Description copied from class:Protocol
Called after a protocol has been created and before the protocol is started. Attributes are already set. Other protocols are not yet connected and events cannot yet be sent.
-
start
public void start() throws java.lang.Exception
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads- Specified by:
start
in interfaceLifecycle
- Overrides:
start
in classTP
- Throws:
java.lang.Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, soJChannel.connect(String)
will throw an exception
-
stop
public void stop()
Description copied from class:Protocol
Called on aJChannel.disconnect()
; stops work (e.g. by closing multicast socket). Will be called from top to bottom.
-
handleConnect
protected void handleConnect() throws java.lang.Exception
- Overrides:
handleConnect
in classTP
- 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)
-
setNetworkInterface
protected <T extends UDP> T setNetworkInterface(java.net.InetAddress addr, java.net.MulticastSocket s)
-
getPhysicalAddress
protected PhysicalAddress getPhysicalAddress()
- Specified by:
getPhysicalAddress
in classTP
-
joinGroupOnInterfaces
protected void joinGroupOnInterfaces(java.util.List<java.net.NetworkInterface> interfaces, java.net.MulticastSocket s, java.net.InetAddress mcast_addr)
Joins a multicast address on all interfaces- Parameters:
interfaces
- List. The interfaces to join mcast_addr:mcast_port s
- The MulticastSocket to join onmcast_addr
- The multicast address to join
-
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
-
-