クラスSctpChannel

すべての実装されたインタフェース:
Closeable, AutoCloseable, Channel, InterruptibleChannel

public abstract class SctpChannel extends AbstractSelectableChannel
メッセージ指向の接続されたSCTPソケットの選択可能なチャネルです。

SCTPチャネルは、1つのSCTPアソシエーションのみを制御できます。 このクラスのいずれかのopenメソッドを呼び出すと、SCTPChannelが作成されます。 新しく作成されたチャネルはオープンですが、接続は確立されていません。つまり、リモート・ピアとのアソシエーション設定はありません。 未接続のチャネルに対して入出力操作を呼び出そうとすると、NotYetConnectedExceptionがスローされます。 アソシエーションを設定するには、いずれかのconnectメソッドを使用してチャネルを接続します。 接続されたチャネルは、クローズされるまで接続されたままになります。 チャネルが接続されているかどうかは、getRemoteAddressesの呼出しによって判断できます。

SCTPチャネルは非ブロック接続をサポートします。チャネルの作成とリモート・ソケットへのリンクを確立するプロセスの開始はconnectメソッドによって行われ、後でfinishConnectメソッドによって完了します。 接続操作が実行中であるかどうかは、isConnectionPendingメソッドの呼出しによって判断できます。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 SCTPチャネルでは次のオプションがサポートされます。

ソケット・オプション
オプション名 説明
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個以下です。 connectメソッドとfinishConnectメソッドは相互に同期しており、いずれかのメソッドの呼出し中に送信または受信操作を開始しようとすると、この処理はその呼出しが完了するまでブロックされます。

導入されたバージョン:
1.7
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    このクラスの新しいインスタンスを初期化します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract Association
    このチャネルのソケット上のアソシエーションを返します。
    abstract SctpChannel
    チャネルのソケットをローカル・アドレスにバインドします。
    abstract SctpChannel
    指定されたアドレスをチャネルのソケットにバインドされているアドレスに追加します。
    abstract boolean
    このチャネルのソケットを接続します。
    abstract boolean
    connect(SocketAddress remote, int maxOutStreams, int maxInStreams)
    このチャネルのソケットを接続します。
    abstract boolean
    SCTPチャネルの接続処理を完了します。
    abstract Set<SocketAddress>
    このチャネルのソケットがバインドされているすべてのソケット・アドレスを返します。
    abstract <T> T
    ソケット・オプションの値を返します。
    abstract Set<SocketAddress>
    このチャネルのソケットが接続されているすべてのリモート・アドレスを返します。
    abstract boolean
    このチャネル上で接続操作が進行中かどうかを判断します。
    SCTPチャネルを開きます。
    open(SocketAddress remote, int maxOutStreams, int maxInStreams)
    SCTPチャネルを開き、リモート・アドレスに接続します。
    abstract <T> MessageInfo
    receive(ByteBuffer dst, T attachment, NotificationHandler<T> handler)
    指定されたバッファへのメッセージを受信するか、通知を処理します(あるいはその両方を行います)。
    abstract int
    send(ByteBuffer src, MessageInfo messageInfo)
    このチャネル経由でメッセージを送信します。
    abstract <T> SctpChannel
    setOption(SctpSocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    abstract SctpChannel
    チャネルを閉じずに接続を停止します。
    abstract Set<SctpSocketOption<?>>
    このチャネルがサポートするソケット・オプションのセットを返します。
    abstract SctpChannel
    指定されたアドレスをチャネルのソケットにバインドされているアドレスから削除します。
    final int
    このチャネルのサポートされている操作を識別する操作セットを返します。

    クラスで宣言されたメソッド AbstractSelectableChannel

    blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
    修飾子と型
    メソッド
    説明
    final Object
    configureBlockingおよびregisterメソッドが同期するオブジェクトを取得します。
    configureBlocking(boolean block)
    このチャネルのブロック・モードを調整します。
    protected final void
    現在のチャネルをクローズします。
    protected abstract void
    この選択可能チャネルをクローズします。
    protected abstract void
    implConfigureBlocking(boolean block)
    このチャネルのブロック・モードを調整します。
    final boolean
    このチャネル上の個々の入出力操作が前の入出力操作が完了するまでブロックされるかどうかを判断します。
    final boolean
    現在このチャネルがセレクタに登録されているかどうかを判断します。
    チャネルが指定されたセレクタに登録されていることを示すキーを取得します。
    このチャネルの作成元プロバイダを返します。
    register(Selector sel, int ops, Object att)
    このチャネルを指定されたセレクタに登録し、選択キーを返します。

    クラスで宣言されたメソッド SelectableChannel

    register
    修飾子と型
    メソッド
    説明
    register(Selector sel, int ops)
    このチャネルを指定されたセレクタに登録し、選択キーを返します。

    クラスで宣言されたメソッド AbstractInterruptibleChannel

    begin, close, end, isOpen
    修飾子と型
    メソッド
    説明
    protected final void
    無期限にブロックされる入出力操作の開始をマークします。
    final void
    現在のチャネルをクローズします。
    protected final void
    end(boolean completed)
    無期限にブロックされる入出力操作の終了をマークします。
    final boolean
    現在のチャネルの状態がオープンであるかどうかを判断します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • SctpChannel

      protected SctpChannel(SelectorProvider provider)
      このクラスの新しいインスタンスを初期化します。
      パラメータ:
      provider - このチャネルのセレクタ・プロバイダ
  • メソッドの詳細

    • open

      public static SctpChannel open() throws IOException
      SCTPチャネルを開きます。

      新しいチャネルは未バインドで未接続です。

      戻り値:
      新しいSCTPチャネル
      スロー:
      UnsupportedOperationException - SCTPプロトコルがサポートされていない場合
      IOException - 入出力エラーが発生した場合
    • open

      public static SctpChannel open(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
      SCTPチャネルを開き、リモート・アドレスに接続します。

      これは簡易メソッドであり、次の式の評価と等価です。

      open().connect(remote, maxOutStreams, maxInStreams);
      

      パラメータ:
      remote - 新しいチャネルの接続先リモート・アドレス
      maxOutStreams - アプリケーションで送信できることを予定するストリームの数。 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      maxInStreams - アプリケーションがサポートするように準備されるインバウンド・ストリームの最大数。 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      戻り値:
      指定されたアドレスに接続された、新しいSCTPチャネル
      スロー:
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      UnsupportedOperationException - SCTPプロトコルがサポートされていない場合
      IOException - その他の入出力エラーが発生した場合
    • association

      public abstract Association association() throws IOException
      このチャネルのソケット上のアソシエーションを返します。
      戻り値:
      アソシエーション。チャネルのソケットが接続されていない場合はnull
      スロー:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • bind

      public abstract SctpChannel bind(SocketAddress local) throws IOException
      チャネルのソケットをローカル・アドレスにバインドします。

      このメソッドは、ソケットとローカル・アドレスとの間の関係を確立するために使用されます。 関係が確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。 この関係はunbindAddressによって削除される可能性があるため、必ずしもアドレスlocalとの関係であるとはかぎりませんが、このメソッドの呼出しが正常に完了すれば、チャネルのソケットにバインドされたローカル・アドレスが必ず1つ以上存在します。

      チャネルのソケットが(自動的に割り当てられない)特定のアドレスに正常にバインドされると、追加のアドレスをbindAddressを使用してバインドしたり、unbindAddressを使用して削除したりできます。

      パラメータ:
      local - ソケットのバインド先のローカル・アドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
      戻り値:
      このチャネル
      スロー:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      AlreadyBoundException - このチャネルがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
    • bindAddress

      public abstract SctpChannel bindAddress(InetAddress address) throws IOException
      指定されたアドレスをチャネルのソケットにバインドされているアドレスに追加します。

      指定されたアドレスは、ワイルドカード・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbindを使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundExceptionがスローされます。 bindメソッドは、引数としてSocketAddressを取ります。通常は、アドレスに加えてポート番号も含まれます。 チャネルの存続期間内はSCTPポート番号は同じままであるため、その後、このメソッドを使用してバインドされたアドレスにはアドレスのみが含まれます。

      接続されたアソシエーションにアドレスを追加することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。

      パラメータ:
      address - ソケットにバインドされたアドレスに追加されるアドレス
      戻り値:
      このチャネル
      スロー:
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      NotYetBoundException - このチャネルがまだバインドされていない場合
      AlreadyBoundException - このチャネルがすでに指定されたアドレスにバインドされている場合
      IllegalArgumentException - アドレスがnullまたはwildcardアドレスの場合
      IOException - その他の入出力エラーが発生した場合
    • unbindAddress

      public abstract SctpChannel unbindAddress(InetAddress address) throws IOException
      指定されたアドレスをチャネルのソケットにバインドされているアドレスから削除します。

      指定されたアドレスは、ワイルドカード・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbindを使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundExceptionがスローされます。 バインドされたアドレスの1つとしてaddressが含まれないチャネルまたはバインドされているローカル・アドレスが1つしかないチャネルでこのメソッドが呼び出された場合はIllegalUnbindExceptionがスローされます。 bindを使用してチャネルのソケットがバインドされる初期アドレスは、チャネルのソケットにバインドされたアドレスから削除される可能性があります。

      接続されたアソシエーションからアドレスを削除することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。

      パラメータ:
      address - ソケットにバインドされたアドレスから削除されるアドレス
      戻り値:
      このチャネル
      スロー:
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      NotYetBoundException - このチャネルがまだバインドされていない場合
      IllegalArgumentException - アドレスがnullまたはwildcardアドレスの場合
      IllegalUnbindException - addressがチャネルのソケットにバインドされていない場合、またはチャネルにバインドされたアドレスが1つのみである場合
      IOException - その他の入出力エラーが発生した場合
    • connect

      public abstract boolean connect(SocketAddress remote) throws IOException
      このチャネルのソケットを接続します。

      このチャネルが非ブロック・モードの場合、このメソッドの呼出しにより、非ブロック接続操作が開始されます。 ローカル接続の場合のように即座に接続が確立される場合、このメソッドはtrueを返します。 それ以外の場合はfalseを返し、あとでfinishConnectメソッドを呼び出すことにより、接続操作を完了する必要があります。

      このチャネルがブロック・モードの場合、このメソッドの呼出しは、接続が確立されるか入出力エラーが発生するまでブロックされます。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対するsendまたはreceive操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      パラメータ:
      remote - このチャネルの接続先リモート・ピア
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      スロー:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
    • connect

      public abstract boolean connect(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
      このチャネルのソケットを接続します。

      これは簡易メソッドであり、次の式の評価と等価です。

      setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
       .connect(remote);
      

      maxOutStreamsおよびmaxInStreamsパラメータは、アプリケーションで送受信できることを予定するストリームの最大数を表します。 これらはリモート・ピアとネゴシエーションされますが、オペレーティング・システムにより制限されることがあります。

      パラメータ:
      remote - このチャネルの接続先リモート・ピア
      maxOutStreams - 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      maxInStreams - 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      スロー:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
    • isConnectionPending

      public abstract boolean isConnectionPending()
      このチャネル上で接続操作が進行中かどうかを判断します。
      戻り値:
      このチャネル上で接続操作が開始されていて、finishConnect()メソッドを呼び出すことによってまだ完了していない場合にかぎりtrue
    • finishConnect

      public abstract boolean finishConnect() throws IOException
      SCTPチャネルの接続処理を完了します。

      ソケット・チャネルを非ブロック・モードにし、そのconnectメソッドの1つを呼び出すと、非ブロック接続操作が開始されます。 接続が確立されるか、接続に失敗したあと、チャネルは接続可能な状態になり、接続シーケンスを完了するために、このメソッドを呼び出すことができます。 接続操作に失敗した場合、このメソッドを呼び出すと適切なIOExceptionがスローされます。

      このチャネルがすでに接続されている場合、このメソッドはブロックされず、すぐにtrueを返します。 このチャネルが非ブロッキング・モードの場合、接続プロセスが完了していないと、このメソッドはfalseを返します。 このチャネルがブロッキング・モードの場合、このメソッドは、接続が完了するか失敗するまでブロックし、常にtrueを返すか、失敗を説明するチェック済の例外をスローします。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対するsendまたはreceive操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      戻り値:
      このチャネルのソケットが接続されている場合にかぎりtrue
      スロー:
      NoConnectionPendingException - このチャネルが接続されておらず、接続操作も開始されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • getAllLocalAddresses

      public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
      このチャネルのソケットがバインドされているすべてのソケット・アドレスを返します。
      戻り値:
      このチャネルのソケットがバインドされているすべてのソケット・アドレス、チャネルのソケットがバインドされていない場合は空のSet
      スロー:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
    • getRemoteAddresses

      public abstract Set<SocketAddress> getRemoteAddresses() throws IOException
      このチャネルのソケットが接続されているすべてのリモート・アドレスを返します。

      チャネルが複数のアドレスにバインドされているリモート・ピアに接続する場合、これらのアドレスがチャネルのソケットが接続されるアドレスになります。

      戻り値:
      このチャネルのソケットが接続されているすべてのリモート・アドレス、チャネルのソケットが接続されていない場合は空のSet
      スロー:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
    • shutdown

      public abstract SctpChannel shutdown() throws IOException
      チャネルを閉じずに接続を停止します。

      shutdownコマンドをリモート・ピアに送信することで、いずれかのピアによってあらゆる新しいデータがソケットに書き込まれることを事実上防ぎます。 さらに送信すると、ClosedChannelExceptionがスローされます。 チャネルはオープンされたままであるため、shutdownコマンドの受信前にピアが送信した可能性のあるデータ(および通知)はすべて受信できます。 チャネルがすでに停止している状態でこのメソッドを呼び出しても、何の効果もありません。

      戻り値:
      このチャネル
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • getOption

      public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException
      ソケット・オプションの値を返します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      戻り値:
      ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      スロー:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      関連項目:
    • setOption

      public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value) throws IOException
      ソケット・オプションの値を設定します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      value - ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      戻り値:
      このチャネル
      スロー:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      IllegalArgumentException - 値がこのソケット・オプションに対して有効な値でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      関連項目:
    • supportedOptions

      public abstract Set<SctpSocketOption<?>> supportedOptions()
      このチャネルがサポートするソケット・オプションのセットを返します。

      このメソッドは、チャネルが閉じられたあとでも引き続きオプションのセットを返します。

      戻り値:
      このチャネルでサポートされるソケット・オプションのセット
    • validOps

      public final int validOps()
      このチャネルのサポートされている操作を識別する操作セットを返します。

      SCTPチャネルは接続、読取りおよび書込みをサポートしているため、このメソッドは( SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE)を返します。

      定義:
      validOps、クラスSelectableChannel
      戻り値:
      有効な操作セット
    • receive

      public abstract <T> MessageInfo receive(ByteBuffer dst, T attachment, NotificationHandler<T> handler) throws IOException
      指定されたバッファへのメッセージを受信するか、通知を処理します(あるいはその両方を行います)。

      メッセージまたは通知をすぐに使用できる場合、またはこのチャネルがブロック・モードで動作していて、最終的に使用可能になる場合は、そのメッセージが返されるか、通知が処理されます。 このチャネルが非ブロック・モードで動作していて、メッセージまたは通知をすぐに使用できない場合は、このメソッドはただちにnullを返します。

      このメソッドがメッセージを受け取ると、そのメッセージは指定されたbyteバッファにコピーされます。 メッセージは指定されたbyteバッファの現在位置に転送され、バッファの位置は読み取られたバイト数だけ増分されます。 バッファ内に残っているバイト数がメッセージの格納に必要なバイト数より少ない場合や、基本となる入力バッファに完全なメッセージが含まれていない場合は、返された MessageInfoisCompleteを呼び出すとfalseが返されます。メッセージを完全に処理するには、このメソッドをさらに呼び出す必要があります。 どのストリームでも、一度に1つのメッセージが部分的に配信されるのみです。 ソケット・オプションSCTP_FRAGMENT_INTERLEAVEは、メッセージのインタレースが発生する様々な側面を制御します。

      このメソッドが通知を受信した場合は、指定されたハンドラの適切なメソッド(存在する場合)が呼び出されます。 ハンドラでCONTINUEが返された場合、このメソッドは別のメッセージまたは通知を受信しようとします。RETURNが返された場合、このメソッドは nullを返します。 ハンドラでキャッチされない例外がスローされた場合は、その例外がこのメソッドからスタックまで伝播されます。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して受信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。 前述の同期ポリシーを強制するために使用されるロックを保持せずに、指定されたハンドラが呼び出された場合は、ハンドラによる他のスレッドの受信が停止されません。 ハンドラは、このチャネルのreceiveメソッドを呼び出すことはできません。呼び出した場合は、IllegalReceiveExceptionがスローされます。

      型パラメータ:
      T - 添付のタイプ
      パラメータ:
      dst - メッセージのバイトの転送先バッファ
      attachment - 受信操作に接続されるオブジェクト。nullも可
      handler - SCTPスタックからの通知を処理するハンドラ、通知を無視する場合は null
      戻り値:
      MessageInfo、このチャネルが非ブロック・モードで動作していて、メッセージがすぐに使用できない場合、または通知が処理されたあとに通知ハンドラがRETURNを返した場合はnull
      スロー:
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      IllegalReceiveException - 指定されたハンドラでこのチャネルのreceiveメソッドが呼び出される場合
      IOException - その他の入出力エラーが発生した場合
    • send

      public abstract int send(ByteBuffer src, MessageInfo messageInfo) throws IOException
      このチャネル経由でメッセージを送信します。

      チャネルの動作モードが非ブロック・モードで基になる出力バッファの容量が十分である場合や、動作モードがブロック・モードで十分な容量がある場合、指定されたbyteバッファ内に残っているバイトは単一のメッセージとして転送されます。 このチャネルのソケットで明示的なメッセージの完了SCTP_EXPLICIT_COMPLETEソケット・オプションが有効になっていなければ、メッセージの送信はアトミックです。

      メッセージは、通常のwrite操作を実行した場合と同様に、byteバッファから転送されます。

      バイトは、指定された messageInfostreamNumberで指定されているストリーム番号に書き込まれます。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して送信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      パラメータ:
      src - 送信されるメッセージを含むバッファ
      messageInfo - 送信されるメッセージに関する補助データ
      戻り値:
      送信バイト数(このメソッドを呼び出したときにメッセージ・バッファ内に残っていたバイト数)。このチャネルが非ブロック・モードで動作しており、基準となる出力バッファの容量が不十分なためメッセージが収まりきらない場合はゼロ
      スロー:
      InvalidStreamException - streamNumnerが負の値である場合、またはそれが出力ストリームの最大数に等しいか、それよりも大きい場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      IOException - その他の入出力エラーが発生した場合