public abstract class SctpMultiChannel extends AbstractSelectableChannel
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 個以下のみ存在します。
修飾子 | コンストラクタと説明 |
---|---|
protected |
SctpMultiChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
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()
このチャネルのサポートされている操作を識別する操作セットを返します。
|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
register
begin, close, end, isOpen
protected SctpMultiChannel(SelectorProvider provider)
provider
- このチャネルのセレクタプロバイダpublic static SctpMultiChannel open() throws IOException
新しいチャネルは未バインドです。
UnsupportedOperationException
- SCTP プロトコルがサポートされていない場合IOException
- 入出力エラーが発生した場合public abstract Set<Association> associations() throws IOException
返されるアソシエーションのセットには、COMM_UP
アソシエーション変更イベントが受信されたアソシエーションのみが含まれます。COMM_LOST
または SHUTDOWN
アソシエーション変更イベントが受信されたアソシエーションは、アソシエーションのセットから削除されます。
返されるアソシエーションのセットは、このメソッドが呼び出された時点で開いているアソシエーションのスナップショットです。
Set
、開いているアソシエーションが存在しない場合は空の Set
。ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合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
- その他の入出力エラーが発生した場合public final SctpMultiChannel bind(SocketAddress local) throws IOException
このメソッドの呼び出しは、式を評価することと同様に動作します。
bind(local, 0);
local
- ソケットのバインド先のローカルアドレス、または自動的に割り当てられるソケットアドレスにソケットをバインドする場合は null
ClosedChannelException
- このチャネルがクローズしている場合AlreadyBoundException
- このチャネルがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合SecurityException
- セキュリティーマネージャーがインストールされていて、checkListen
メソッドが操作を拒否した場合IOException
- その他の入出力エラーが発生した場合public abstract SctpMultiChannel bindAddress(InetAddress address) throws IOException
指定されたアドレスは、wildcard
アドレスであってはいけません。このメソッドを呼び出す前に、まず bind
を使用してチャネルをバインドする必要があります。そうしなければ、NotYetBoundException
がスローされます。bind
メソッドは、引数として SocketAddress
をとります。通常は、アドレスに加えてポート番号も含まれます。チャネルの存続期間内は SCTP ポート番号は同じままであるため、その後、このメソッドを使用してバインドされたアドレスには単にアドレスのみが含まれます。
このメソッドが正常に完了したあとに設定される新しいアソシエーションでは、指定されたアドレスと関連付けされます。既存のアソシエーションにアドレスを追加することはオプションの機能です。エンドポイントで動的なアドレス再構成がサポートされている場合は、ピアアドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。
address
- ソケットにバインドされたアドレスに追加されるアドレスClosedChannelException
- このチャネルがクローズしている場合NotYetBoundException
- このチャネルがまだバインドされていない場合AlreadyBoundException
- このチャネルがすでに指定されたアドレスにバインドされている場合IllegalArgumentException
- アドレスが null
または wildcard
アドレスの場合IOException
- その他の入出力エラーが発生した場合public abstract SctpMultiChannel unbindAddress(InetAddress address) throws IOException
指定されたアドレスは、wildcard
アドレスであってはいけません。このメソッドを呼び出す前に、まず bind
を使用してチャネルをバインドする必要があります。そうしなければ、NotYetBoundException
がスローされます。
バインドされたアドレスの 1 つとして address
が含まれないチャネルまたはバインドされているローカルアドレスが 1 つしかないチャネルでこのメソッドが呼び出された場合は IllegalUnbindException
がスローされます。
bind
を使用してチャネルのソケットがバインドされる初期アドレスは、チャネルのソケットにバインドされたアドレスから削除される可能性があります。
このメソッドが正常に完了したあとに設定される新しいアソシエーションでは、指定されたアドレスと関連付けされません。既存のアソシエーションからアドレスを削除することはオプションの機能です。エンドポイントで動的なアドレス再構成がサポートされている場合は、ピアアドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。
address
- ソケットにバインドされたアドレスから削除されるアドレスClosedChannelException
- このチャネルがクローズしている場合NotYetBoundException
- このチャネルがまだバインドされていない場合IllegalUnbindException
- address
がチャネルのソケットにバインドされていない場合、またはチャネルにバインドされたアドレスが 1 つのみである場合IllegalArgumentException
- アドレスが null
または wildcard
アドレスの場合IOException
- その他の入出力エラーが発生した場合public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
Set
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合public abstract Set<SocketAddress> getRemoteAddresses(Association association) throws IOException
Set
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合public abstract SctpMultiChannel shutdown(Association association) throws IOException
association
- 停止するアソシエーションClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合public abstract <T> T getOption(SctpSocketOption<T> name, Association association) throws IOException
一部のオプションがチャネルのソケットで取得されるため、association
パラメータは適用されず、指定されても無視されることに注意してください。ただし、アソシエーション固有のオプションである場合は、そのアソシエーションを指定する必要があります。
name
- ソケットオプションassociation
- オプションを取得すべきアソシエーション、このオプションをチャネルのソケットレベルで取得すべき場合は null
。null
の値が有効な値である場合があります。UnsupportedOperationException
- チャネルがソケットオプションをサポートしていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合SctpStandardSocketOptions
public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name, T value, Association association) throws IOException
一部のオプションがチャネルのソケットで取得されるため、association
パラメータは適用されず、指定されても無視されることに注意してください。ただし、アソシエーション固有のオプションである場合は、そのアソシエーションを指定する必要があります。
name
- ソケットオプションassociation
- オプションを設定すべきアソシエーション、このオプションをチャネルのソケットレベルで設定すべき場合は null
。value
- ソケットオプションの値。一部のソケットオプションに対しては、null
の値が有効な値である場合があります。UnsupportedOperationException
- チャネルがソケットオプションをサポートしていない場合IllegalArgumentException
- 値がこのソケットオプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合SctpStandardSocketOptions
public abstract Set<SctpSocketOption<?>> supportedOptions()
このメソッドは、チャネルが閉じられたあとでも引き続きオプションのセットを返します。
public final int validOps()
SCTP マルチチャネルは、読み込みと書き込みをサポートするため、このメソッドは (
SelectionKey.OP_READ
|
SelectionKey.OP_WRITE
)
を返します。
validOps
、クラス: SelectableChannel
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
がスローされます。
buffer
- バイトの転送先バッファーattachment
- 受信操作に接続されるオブジェクト。次も可: null
handler
- SCTP スタックからの通知を処理するハンドラ、通知を無視する場合は null
。MessageInfo
、このチャネルが非ブロックモードで動作していて、メッセージがすぐに使用できない場合、または通知が処理されたあとに通知ハンドラが RETURN
を返す場合は null
ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合NotYetBoundException
- このチャネルがまだバインドされていない場合IllegalReceiveException
- 指定されたハンドラでこのチャネルの receive
メソッドが呼び出される場合SecurityException
- セキュリティーマネージャーがインストールされていて、メッセージの送信側が新しいアソシエーションの受け入れを許可していない場合IOException
- その他の入出力エラーが発生した場合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
- 送信されるメッセージに関する補助データInvalidStreamExcepton
- streamNumber
が負の値である場合、またはアソシエーションがすでに存在していて streamNumber
が出力ストリームの最大数よりも大きい場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合SecurityException
- セキュリティーマネージャーがインストールされていて、メッセージのアドレスを使用した新しいアソシエーションの設定を許可していない場合IOException
- その他の入出力エラーが発生した場合public abstract SctpChannel branch(Association association) throws IOException
アプリケーションはこのメソッドを呼び出して、アソシエーションを異なるチャネルに分岐できます。アソシエーションに新しくバインドおよび接続された SctpChannel
が作成されます。分岐されたアソシエーションは、このチャネルの一部ではなくなります。
これは、たとえばアプリケーションで、散発的に発生する複数の送信側/受信側を元の SCTP マルチチャネルに残したまま、大量のデータトラフィックを伝送するアソシエーションを専用の独立 SCTP チャネルに分岐する場合に、特に役立ちます。
association
- 分岐するアソシエーションSctpChannel
ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
Copyright © 2009, 2013, Oracle and/or its affiliates. All rights reserved.