- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- com.sun.nio.sctp.SctpMultiChannel
-
- すべての実装されたインタフェース:
Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
public abstract class SctpMultiChannel extends AbstractSelectableChannel
メッセージ指向のSCTPソケットの選択可能なチャネルです。SCTPマルチチャネルは、単一ソケットにおける多数のアソシエーションをサポートします。 このクラスの
open
メソッドを呼び出すと、SctpMultiChannel
が作成されます。 新しく作成されたチャネルはオープンですが、未バインドです。 バインドされていないチャネルのreceive
メソッドを呼び出そうとすると、NotYetBoundException
がスローされます。 バインドされていないチャネルのsend
メソッドを呼び出そうとすると、最初にbind
メソッドが呼び出されます。 チャネルのソケットがバインドされているアドレスは、getAllLocalAddresses
を呼び出して取得できます。メッセージは、リモート・ピアとのアソシエーションを明示的に設定しなくても、送受信できます。 チャネルは、リモート・ピアに対してメッセージを送受信するときは常に、そのピアとのアソシエーションが存在しない場合は新しいアソシエーションを暗黙的に設定します。 正常にアソシエーションが設定されると、
event
パラメータがCOMM_UP
に設定されたSCTPスタックにassociation changed
通知が配置されます。receive
を呼び出すと、この通知を受信できます。ソケット・オプションは
setOption
メソッドを使用して構成されます。SctpMultiChannel
は次のオプションをサポートしています。オプション名 説明 SCTP_DISABLE_FRAGMENTS
メッセージの断片化を有効または無効にします SCTP_EXPLICIT_COMPLETE
明示的なメッセージの完了を有効または無効にします SCTP_FRAGMENT_INTERLEAVE
メッセージ受信者に対するメッセージの表現方法を制御します SCTP_INIT_MAXSTREAMS
アソシエーションの初期化中にローカル・エンドポイントで要求されたストリームの最大数 SCTP_NODELAY
Nagleに似たアルゴリズムを有効または無効にします SCTP_PRIMARY_ADDR
ローカルSCTPスタックで、指定されたピア・アドレスがアソシエーション・プライマリとして使用されるように要求します SCTP_SET_PEER_PRIMARY_ADDR
囲まれたアドレスがピアによってアソシエーション・プライマリとしてマークされるように要求します SO_SNDBUF
ソケット送信バッファのサイズ SO_RCVBUF
ソケット受信バッファのサイズ SO_LINGER
閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ) supportedOptions
メソッドを呼び出すと、サポートされているオプションのリストが取得されます。SCTPマルチチャネルは、複数の並行スレッドで安全に使用できます。 並行送信および受信をサポートしますが、特定の時点で、送信を行うスレッドも受信を行うスレッドもそれぞれ1個以下のみ存在します。
- 導入されたバージョン:
- 1.7
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
SctpMultiChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 abstract Set<Association>
associations()
このチャネルのソケット上で開いているアソシエーションを返します。SctpMultiChannel
bind(SocketAddress local)
チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。abstract SctpMultiChannel
bind(SocketAddress local, int backlog)
チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。abstract SctpMultiChannel
bindAddress(InetAddress address)
指定されたアドレスをチャネルのソケットにバインドされているアドレスに追加します。abstract SctpChannel
branch(Association association)
アソシエーションを分岐します。abstract Set<SocketAddress>
getAllLocalAddresses()
このチャネルのソケットがバインドされているすべてのソケット・アドレスを返します。abstract <T> T
getOption(SctpSocketOption<T> name, Association association)
ソケット・オプションの値を返します。abstract Set<SocketAddress>
getRemoteAddresses(Association association)
このチャネルのソケット上の指定されたアソシエーションが接続されているすべてのリモート・アドレスを返します。static SctpMultiChannel
open()
SCTPマルチチャネルを開きます。abstract <T> MessageInfo
receive(ByteBuffer buffer, T attachment, NotificationHandler<T> handler)
このチャネル経由でメッセージを受信するか、通知を処理します(あるいはその両方を行います)。abstract int
send(ByteBuffer buffer, MessageInfo messageInfo)
このチャネル経由でメッセージを送信します。abstract <T> SctpMultiChannel
setOption(SctpSocketOption<T> name, T value, Association association)
ソケット・オプションの値を設定します。abstract SctpMultiChannel
shutdown(Association association)
チャネルを閉じずにアソシエーションを停止します。abstract Set<SctpSocketOption<?>>
supportedOptions()
このチャネルがサポートするソケット・オプションのセットを返します。abstract SctpMultiChannel
unbindAddress(InetAddress address)
指定されたアドレスをチャネルのソケットにバインドされているアドレスから削除します。int
validOps()
このチャネルのサポートされている操作を識別する操作セットを返します。-
クラス java.nio.channels.spi.AbstractSelectableChannelで宣言されたメソッド
configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register
-
クラス java.nio.channels.SelectableChannelで宣言されたメソッド
blockingLock, isBlocking, isRegistered, keyFor, register
-
クラス java.nio.channels.spi.AbstractInterruptibleChannelで宣言されたメソッド
begin, close, end
-
-
-
-
コンストラクタの詳細
-
SctpMultiChannel
protected SctpMultiChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。- パラメータ:
provider
- このチャネルのセレクタ・プロバイダ
-
-
メソッドの詳細
-
open
public static SctpMultiChannel open() throws IOException
SCTPマルチチャネルを開きます。新しいチャネルは未バインドです。
- 戻り値:
- 新しいSCTPマルチチャネル
- 例外:
UnsupportedOperationException
- SCTPプロトコルがサポートされていない場合IOException
- 入出力エラーが発生した場合
-
associations
public abstract Set<Association> associations() throws IOException
このチャネルのソケット上で開いているアソシエーションを返します。返されるアソシエーションのセットには、
COMM_UP
アソシエーション変更イベントが受信されたアソシエーションのみが含まれます。COMM_LOST
またはSHUTDOWN
アソシエーション変更イベントが受信されたアソシエーションは、アソシエーションのセットから削除されます。返されるアソシエーションのセットは、このメソッドが呼び出された時点で開いているアソシエーションのスナップショットです。
- 戻り値:
- 開いているアソシエーションが含まれる
Set
、開いているアソシエーションが存在しない場合は空のSet
。 - 例外:
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
-
bind
public abstract SctpMultiChannel bind(SocketAddress local, int backlog) throws IOException
チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。このメソッドは、ソケットとローカル・アドレスとの間の関係を確立するために使用されます。 関係が確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。 この関係は
unbindAddress
によって削除される可能性があるため、必ずしもアドレスlocal
との関係であるとはかぎりませんが、このメソッドの呼出しが正常に完了すれば、チャネルのソケットにバインドされたローカル・アドレスが必ず1つ以上存在します。チャネルのソケットが(自動的に割り当てられない)特定のアドレスに正常にバインドされると、追加のアドレスを
bindAddress
を使用してバインドしたり、unbindAddress
を使用して削除したりできます。backlogパラメータは、ソケットの保留されている接続の最大数です。 正確なセマンティックスは実装に固有です。 実装によっては、特定の最大長が規定されていたり、パラメータが無視されたりする場合もあります。 backlogパラメータの値が
0
または負の値の場合は、実装固有のデフォルトが使用されます。- パラメータ:
local
- ソケットのバインド先のローカル・アドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
backlog
- 保留されている接続の最大数。- 戻り値:
- このチャネル
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合AlreadyBoundException
- このチャネルがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合SecurityException
- セキュリティ・マネージャがインストールされていて、checkListen
メソッドが操作を拒否した場合IOException
- その他の入出力エラーが発生した場合
-
bind
public final SctpMultiChannel bind(SocketAddress local) throws IOException
チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。このメソッドの呼出しは、式を評価することと同様に動作します。
bind(local, 0);
- パラメータ:
local
- ソケットのバインド先のローカル・アドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
- 戻り値:
- このチャネル
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合AlreadyBoundException
- このチャネルがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合SecurityException
- セキュリティ・マネージャがインストールされていて、checkListen
メソッドが操作を拒否した場合IOException
- その他の入出力エラーが発生した場合
-
bindAddress
public abstract SctpMultiChannel bindAddress(InetAddress address) throws IOException
指定されたアドレスをチャネルのソケットにバインドされているアドレスに追加します。指定されたアドレスは、
ワイルドカード
・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbind
を使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundException
がスローされます。bind
メソッドは、引数としてSocketAddress
を取ります。通常は、アドレスに加えてポート番号も含まれます。 チャネルの存続期間内はSCTPポート番号は同じままであるため、その後、このメソッドを使用してバインドされたアドレスにはアドレスのみが含まれます。このメソッドが正常に完了したあとに設定される新しいアソシエーションでは、指定されたアドレスと関連付けされます。 既存のアソシエーションにアドレスを追加することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。
- パラメータ:
address
- ソケットにバインドされたアドレスに追加されるアドレス- 戻り値:
- このチャネル
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合NotYetBoundException
- このチャネルがまだバインドされていない場合AlreadyBoundException
- このチャネルがすでに指定されたアドレスにバインドされている場合IllegalArgumentException
- アドレスがnull
またはwildcard
アドレスの場合IOException
- その他の入出力エラーが発生した場合
-
unbindAddress
public abstract SctpMultiChannel unbindAddress(InetAddress address) throws IOException
指定されたアドレスをチャネルのソケットにバインドされているアドレスから削除します。指定されたアドレスは、
ワイルドカード
・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbind
を使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundException
がスローされます。バインドされたアドレスの1つとして
address
が含まれないチャネルまたはバインドされているローカル・アドレスが1つしかないチャネルでこのメソッドが呼び出された場合はIllegalUnbindException
がスローされます。bind
を使用してチャネルのソケットがバインドされる初期アドレスは、チャネルのソケットにバインドされたアドレスから削除される可能性があります。このメソッドが正常に完了したあとに設定される新しいアソシエーションでは、指定されたアドレスと関連付けされません。 既存のアソシエーションからアドレスを削除することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。
- パラメータ:
address
- ソケットにバインドされたアドレスから削除されるアドレス- 戻り値:
- このチャネル
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合NotYetBoundException
- このチャネルがまだバインドされていない場合IllegalUnbindException
-address
がチャネルのソケットにバインドされていない場合、またはチャネルにバインドされたアドレスが1つのみである場合IllegalArgumentException
- アドレスがnull
またはwildcard
アドレスの場合IOException
- その他の入出力エラーが発生した場合
-
getAllLocalAddresses
public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
このチャネルのソケットがバインドされているすべてのソケット・アドレスを返します。- 戻り値:
- このチャネルのソケットがバインドされているすべてのソケット・アドレス、チャネルのソケットがバインドされていない場合は空の
Set
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合
-
getRemoteAddresses
public abstract Set<SocketAddress> getRemoteAddresses(Association association) throws IOException
このチャネルのソケット上の指定されたアソシエーションが接続されているすべてのリモート・アドレスを返します。- パラメータ:
association
- アソシエーション- 戻り値:
- 指定されたアソシエーションのすべてのリモート・アドレス、アソシエーションが停止している場合は空の
Set
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合
-
shutdown
public abstract SctpMultiChannel shutdown(Association association) throws IOException
チャネルを閉じずにアソシエーションを停止します。- パラメータ:
association
- 停止するアソシエーション- 戻り値:
- このチャネル
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
-
getOption
public abstract <T> T getOption(SctpSocketOption<T> name, Association association) throws IOException
ソケット・オプションの値を返します。一部のオプションがチャネルのソケットで取得されるため、
association
パラメータは適用されず、指定されても無視されることに注意してください。 ただし、アソシエーション固有のオプションである場合は、そのアソシエーションを指定する必要があります。- 型パラメータ:
T
- ソケット・オプション値のタイプ- パラメータ:
name
- ソケット・オプションassociation
- オプションを取得すべきアソシエーション、このオプションをチャネルのソケット・レベルで取得すべき場合はnull
。- 戻り値:
- ソケット・オプションの値。 一部のソケット・オプションに対しては、
null
の値が有効な値である場合があります。 - 例外:
UnsupportedOperationException
- チャネルがソケット・オプションをサポートしていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合- 関連項目:
SctpStandardSocketOptions
-
setOption
public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name, T value, Association association) throws IOException
ソケット・オプションの値を設定します。一部のオプションがチャネルのソケットで取得されるため、
association
パラメータは適用されず、指定されても無視されることに注意してください。 ただし、アソシエーション固有のオプションである場合は、そのアソシエーションを指定する必要があります。- 型パラメータ:
T
- ソケット・オプション値のタイプ- パラメータ:
name
- ソケット・オプションassociation
- オプションを設定すべきアソシエーション、このオプションをチャネルのソケット・レベルで設定すべき場合はnull
。value
- ソケット・オプションの値。 一部のソケット・オプションに対しては、null
の値が有効な値である場合があります。- 戻り値:
- このチャネル
- 例外:
UnsupportedOperationException
- チャネルがソケット・オプションをサポートしていない場合IllegalArgumentException
- 値がこのソケット・オプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合- 関連項目:
SctpStandardSocketOptions
-
supportedOptions
public abstract Set<SctpSocketOption<?>> supportedOptions()
このチャネルがサポートするソケット・オプションのセットを返します。このメソッドは、チャネルが閉じられたあとでも引き続きオプションのセットを返します。
- 戻り値:
- このチャネルでサポートされるソケット・オプションのセット
-
validOps
public final int validOps()
このチャネルのサポートされている操作を識別する操作セットを返します。SCTPマルチチャネルは、読み込みと書込みをサポートするため、このメソッドは
(
SelectionKey.OP_READ
|
SelectionKey.OP_WRITE
)
を返します。- 定義:
validOps
、クラスSelectableChannel
- 戻り値:
- 有効な操作セット
-
receive
public abstract <T> MessageInfo receive(ByteBuffer buffer, T attachment, NotificationHandler<T> handler) throws IOException
このチャネル経由でメッセージを受信するか、通知を処理します(あるいはその両方を行います)。メッセージまたは通知をすぐに使用できる場合、またはこのチャネルがブロック・モードで動作していて、最終的に使用可能になる場合は、そのメッセージが返されるか、通知が処理されます。 このチャネルが非ブロック・モードで動作していて、メッセージまたは通知をすぐに使用できない場合は、このメソッドはただちに
null
を返します。このメソッドがメッセージを受け取ると、そのメッセージは指定されたbyteバッファにコピーされ、
MessageInfo
が返されます。 メッセージは指定されたbyteバッファの現在位置に転送され、バッファの位置は読み取られたバイト数だけ増分されます。 バッファ内に残っているバイト数がメッセージの格納に必要なバイト数より少ない場合や、基本となる入力バッファに完全なメッセージが含まれていない場合は、返されたMessageInfo
でisComplete
を呼び出すとfalse
が返されます。メッセージを完全に処理するには、このメソッドをさらに呼び出す必要があります。 どのストリームでも、一度に1つのメッセージが部分的に配信されるのみです。 ソケット・オプションSCTP_FRAGMENT_INTERLEAVE
は、メッセージのインタレースが発生する様々な側面を制御します。このメソッドが通知を受信した場合は、指定されたハンドラの適切なメソッド(存在する場合)が呼び出されます。 ハンドラで
CONTINUE
が返された場合、このメソッドは別のメッセージまたは通知を受信しようとします。RETURN
が返された場合、このメソッドはnull
を返します。 ハンドラでキャッチされない例外がスローされた場合は、その例外がこのメソッドからスタックまで伝播されます。セキュリティ・マネージャがインストールされている場合、このメソッドは新しい各アソシエーション設定のアソシエーションのソース・アドレスおよびポート番号がセキュリティ・マネージャの
checkAccept
メソッドによって許可されていることを確認します。このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して受信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。 前述の同期ポリシーを強制するために使用されるロックを保持せずに、指定されたハンドラが呼び出された場合は、ハンドラによる他のスレッドの受信が停止されません。 ハンドラは、このチャネルの
receive
メソッドを呼び出すことはできません。呼び出した場合は、IllegalReceiveException
がスローされます。- 型パラメータ:
T
- 接続の型- パラメータ:
buffer
- バイトの転送先バッファattachment
- 受信操作に接続されるオブジェクト。null
も可handler
- SCTPスタックからの通知を処理するハンドラ、通知を無視する場合はnull
。- 戻り値:
MessageInfo
、このチャネルが非ブロック・モードで動作していて、メッセージがすぐに使用できない場合、または通知が処理されたあとに通知ハンドラがRETURN
を返す場合はnull
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合NotYetBoundException
- このチャネルがまだバインドされていない場合IllegalReceiveException
- 指定されたハンドラでこのチャネルのreceive
メソッドが呼び出される場合SecurityException
- セキュリティ・マネージャがインストールされていて、メッセージの送信側が新しいアソシエーションの受け入れを許可していない場合IOException
- その他の入出力エラーが発生した場合
-
send
public abstract int send(ByteBuffer buffer, MessageInfo messageInfo) throws IOException
このチャネル経由でメッセージを送信します。このチャネルが未バウンドの場合、このメソッドはデータの送信前に
bind(null, 0)
を呼び出します。このチャネルのソケットと意図された受信側(指定されたmessageInfo内のアドレスで識別)との間にアソシエーションが存在しない場合は、意図された受信側にアソシエーションが自動的に設定されます。 これは、暗黙的なアソシエーション設定であると考えられます。 正常にアソシエーションが設定されると、
event
パラメータがCOMM_UP
に設定されたSCTPスタックにassociation changed
通知が配置されます。receive
を呼び出すと、この通知を受信できます。このチャネルがブロック・モードで、基になる出力バッファに十分な容量がある場合、指定されたbyteバッファ内に残っているバイトは単一のメッセージとして転送されます。 このチャネルのソケットで明示的なメッセージの完了
SCTP_EXPLICIT_COMPLETE
ソケット・オプションが有効になっていなければ、メッセージの送信はアトミックです。このチャネルが非ブロック・モードで、基になる出力バッファに十分な容量があり、暗黙的なアソシエーション設定が必要な場合、
SCTP_EXPLICIT_COMPLETE
に従って、指定されたbyteバッファ内に残っているバイトは単一のメッセージとして転送されます。 何らかの理由でメッセージを配信できない場合、event
パラメータがCANT_START
に設定された状態でassociation changed
通知がSCTPスタックに配置されます。メッセージは、通常の
write
操作を実行した場合と同様に、byteバッファから転送されます。セキュリティ・マネージャがインストールされている場合、このメソッドは新しい各アソシエーション設定の指定されたリモート・ピアのアドレスおよびポート番号がセキュリティ・マネージャの
checkConnect
メソッドによって許可されていることを確認します。このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して送信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- パラメータ:
buffer
- 送信されるメッセージを含むバッファmessageInfo
- 送信されるメッセージに関する補助データ- 戻り値:
- 送信バイト数(このメソッドを呼び出したときにメッセージ・バッファ内に残っていたバイト数)。このチャネルが非ブロック・モードで動作しており、基準となる出力バッファの容量が不十分なためメッセージが収まりきらない場合はゼロ
- 例外:
InvalidStreamException
-streamNumber
が負の値である場合、またはアソシエーションがすでに存在していてstreamNumber
が出力ストリームの最大数よりも大きい場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合SecurityException
- セキュリティ・マネージャがインストールされていて、新しい関連付けがメッセージ・アドレスで設定されることを許可していない場合IOException
- その他の入出力エラーが発生した場合
-
branch
public abstract SctpChannel branch(Association association) throws IOException
アソシエーションを分岐します。アプリケーションはこのメソッドを呼び出して、アソシエーションを異なるチャネルに分岐できます。 アソシエーションに新しくバインドおよび接続された
SctpChannel
が作成されます。 分岐されたアソシエーションは、このチャネルの一部ではなくなります。これは、たとえばアプリケーションで、散発的に発生する複数の送信側/受信側を元のSCTPマルチチャネルに残したまま、大量のデータ・トラフィックを伝送するアソシエーションを専用の独立SCTPチャネルに分岐する場合に、特に役立ちます。
- パラメータ:
association
- 分岐するアソシエーション- 戻り値:
SctpChannel
- 例外:
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
-
-