Package com.tangosol.net
Class TcpDatagramSocket.Impl
java.lang.Object
java.net.DatagramSocketImpl
com.tangosol.net.TcpDatagramSocket.Impl
- All Implemented Interfaces:
SocketOptions
- Direct Known Subclasses:
NonBlockingTcpDatagramSocket.Impl
- Enclosing class:
- TcpDatagramSocket
A specialized version of
DatagramSocketImpl.-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe fixed header size for packets.static final intProtcol identifier used to identify that peers are also TcpDatagramSockets.Fields inherited from class java.net.DatagramSocketImpl
fd, localPortFields inherited from interface java.net.SocketOptions
IP_MULTICAST_IF, IP_MULTICAST_IF2, IP_MULTICAST_LOOP, IP_TOS, SO_BINDADDR, SO_BROADCAST, SO_KEEPALIVE, SO_LINGER, SO_OOBINLINE, SO_RCVBUF, SO_REUSEADDR, SO_REUSEPORT, SO_SNDBUF, SO_TIMEOUT, TCP_NODELAY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidbind(int nPort, InetAddress addr) protected voidbind(SocketAddress addr) Bind the socket to the specified address.protected voidclose()protected voidcloseInbound(com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, SocketChannel chan) Close the inboundchannel.protected voidcloseOutbound(SocketAddress addr) Close the outbound socket.protected voidcreate()protected com.tangosol.net.TcpDatagramSocket.Impl.ConnectionObtain a Connection for the specified address.protected static SocketExceptionConvert an IOException into a SocketException.protected intgetOption(int nId) protected intprotected bytegetTTL()protected voidjoin(InetAddress inetaddr) protected voidjoinGroup(SocketAddress mcastaddr, NetworkInterface netIf) protected voidleave(InetAddress inetaddr) protected voidleaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) protected voidlogException(SocketAddress addr, IOException e) Log an exception which is handled internally by the TcpDatagramSocket.protected voidlogProtocolWarning(SocketAddress addr, com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, int nMagic) Periodically log a warning when connections are made using an unrecognized protocol.protected com.tangosol.net.TcpDatagramSocket.Impl.ConnectionmakeConnection(SocketAddress addr) Produce a new Connection for the specified destination address.protected SelectionKeynextKey(ByteBuffer buffPacket) Perform a blocking read, waiting for a complete packet.protected voidonAccept(SelectionKey key) Called when a channel is identified as have a new connection to accept.protected booleanonConnectionHeader(com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, SocketChannel chan) Process a pending connection header.protected booleanonRead(SelectionKey key, ByteBuffer buffPacket) Called when a channel is detected as readable.protected intpeek(InetAddress addr) protected intpeekData(DatagramPacket packet) protected voidProcess any scheduled selector registrations.provider()Return the SelectorProvider associated with this socket.protected voidreceive(DatagramPacket packet) protected voidscheduleRegistration(SocketChannel chan, com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status) Schedule a registration with the selector, and wake it up.protected voidsend(DatagramPacket packet) voidvoidsetPacketMagic(int nMagic, int nMask) Specify the packet header which is included at the start of every packet.protected voidsetTimeToLive(int ttl) protected voidsetTTL(byte ttl) toString()protected inttransferBytes(ByteBuffer buffSrc, ByteBuffer buffDst) Transfer bytes from the source to the destination buffer based on their limits.Methods inherited from class java.net.DatagramSocketImpl
connect, disconnect, getFileDescriptor, getOption, setOption, supportedOptions
-
Field Details
-
HEADER_SIZE
public static final int HEADER_SIZEThe fixed header size for packets.- See Also:
-
PROTOCOL_MAGIC
public static final int PROTOCOL_MAGICProtcol identifier used to identify that peers are also TcpDatagramSockets. This is necessary so that we don't try to act upon garbage in this class, for instance trying to allocate a negative or gigabit sized packet.- See Also:
-
-
Constructor Details
-
Impl
Create a new new Impl.- Throws:
SocketException- if any error happens during the bind, or if the port is unavailable
-
Impl
Create a new Impl using aprovider.- Parameters:
provider- theproviderused to create internal sockets- Throws:
SocketException- if any error happens during the bind, or if the port is unavailable
-
-
Method Details
-
provider
Return the SelectorProvider associated with this socket.- Returns:
- the SelectorProvider
-
setPacketMagic
public void setPacketMagic(int nMagic, int nMask) Specify the packet header which is included at the start of every packet. Because this implementation is TCP based these headers can be stripped off, and replaced on the far side without consuming any network resources.- Parameters:
nMagic- the packet headernMask- the packet header bitmask identifying the bits used the mask must be in byte increments
-
create
- Specified by:
createin classDatagramSocketImpl- Throws:
SocketException
-
bind
- Specified by:
bindin classDatagramSocketImpl- Throws:
SocketException
-
getLocalPort
protected int getLocalPort()- Overrides:
getLocalPortin classDatagramSocketImpl
-
send
- Specified by:
sendin classDatagramSocketImpl- Throws:
IOException
-
peek
- Specified by:
peekin classDatagramSocketImpl- Throws:
IOException
-
peekData
- Specified by:
peekDatain classDatagramSocketImpl- Throws:
IOException
-
receive
- Specified by:
receivein classDatagramSocketImpl- Throws:
IOException
-
nextKey
Perform a blocking read, waiting for a complete packet.- Parameters:
buffPacket- the packet buffer- Returns:
- the corresponding SelectionKey
- Throws:
SocketTimeoutException- if SO_TIMEOUT is exceededIOException
-
onAccept
Called when a channel is identified as have a new connection to accept.- Parameters:
key- the associated SelectionKey
-
onRead
Called when a channel is detected as readable.- Parameters:
key- the associated SelectionKeybuffPacket- a buffer in which to place any available full packet- Returns:
- true iff a packet has been read
-
onConnectionHeader
protected boolean onConnectionHeader(com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, SocketChannel chan) throws IOException Process a pending connection header.- Parameters:
status- the associated ConnectionStatuschan- the associated channel- Returns:
- true if EOS has been reached
- Throws:
IOException- if an I/O error occurs
-
close
protected void close()- Specified by:
closein classDatagramSocketImpl
-
setOption
- Throws:
SocketException
-
getOption
- Throws:
SocketException
-
setTTL
- Specified by:
setTTLin classDatagramSocketImpl- Throws:
IOException
-
getTTL
- Specified by:
getTTLin classDatagramSocketImpl- Throws:
IOException
-
setTimeToLive
- Specified by:
setTimeToLivein classDatagramSocketImpl- Throws:
IOException
-
getTimeToLive
- Specified by:
getTimeToLivein classDatagramSocketImpl- Throws:
IOException
-
join
- Specified by:
joinin classDatagramSocketImpl- Throws:
IOException
-
leave
- Specified by:
leavein classDatagramSocketImpl- Throws:
IOException
-
joinGroup
- Specified by:
joinGroupin classDatagramSocketImpl- Throws:
IOException
-
leaveGroup
- Specified by:
leaveGroupin classDatagramSocketImpl- Throws:
IOException
-
bind
Bind the socket to the specified address.- Parameters:
addr- the address to bind to- Throws:
SocketException- if an I/O error occurs
-
ensureSocketException
Convert an IOException into a SocketException.- Parameters:
e- the IOExcepotion- Returns:
- the SocketException
-
makeConnection
protected com.tangosol.net.TcpDatagramSocket.Impl.Connection makeConnection(SocketAddress addr) throws IOException Produce a new Connection for the specified destination address.- Parameters:
addr- the destination address- Returns:
- the corresponding connection
- Throws:
IOException- if an I/O error occurs
-
ensureConnection
protected com.tangosol.net.TcpDatagramSocket.Impl.Connection ensureConnection(SocketAddress addr) throws IOException Obtain a Connection for the specified address.- Parameters:
addr- the destination address- Returns:
- the corresponding connection
- Throws:
IOException- if an I/O error occurs
-
closeInbound
protected void closeInbound(com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, SocketChannel chan) Close the inboundchannel.- Parameters:
status- theConnectionStatuscorresponding to the channelchan- the channel to close
-
closeOutbound
Close the outbound socket.- Parameters:
addr- theaddressof the outbound socket
-
scheduleRegistration
protected void scheduleRegistration(SocketChannel chan, com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status) Schedule a registration with the selector, and wake it up.- Parameters:
chan- the channel to scheduled registration forstatus- the associated ConnectionStatus to register
-
processRegistrations
protected void processRegistrations()Process any scheduled selector registrations. -
transferBytes
Transfer bytes from the source to the destination buffer based on their limits.- Parameters:
buffSrc- the source bufferbuffDst- the destination buffer- Returns:
- the number of bytes transfered
-
logException
Log an exception which is handled internally by the TcpDatagramSocket.- Parameters:
addr- the associated addresse- the exception
-
logProtocolWarning
protected void logProtocolWarning(SocketAddress addr, com.tangosol.net.TcpDatagramSocket.Impl.ConnectionStatus status, int nMagic) Periodically log a warning when connections are made using an unrecognized protocol.- Parameters:
addr- the source address of the connectionstatus- the connection statusnMagic- the "magic" header they sent
-
toString
-