モジュール java.base
パッケージ java.nio.channels

クラスServerSocketChannel

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

public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel
ストリーム型リスニング・ソケット用の選択可能なチャネルです。

サーバー・ソケット・チャネルは、このクラスのopenメソッドのいずれかを呼び出すことで作成されます。 no-arg openメソッドは、「インターネット・プロトコル」ソケットのサーバー・ソケット・チャネルを開きます。 open(ProtocolFamily)メソッドは、指定されたプロトコル・ファミリのソケットのサーバー・ソケット・チャネルを開くために使用されます。 任意の既存のソケット用にチャネルを作成することはできません。 新しく作成されたサーバー・ソケット・チャネルはオープンですが、未バインドです。 バインドされていないサーバー・ソケット・チャネルのacceptメソッドを呼び出そうとすると、NotYetBoundExceptionがスローされます。 サーバー・ソケット・チャネルは、このクラスによって定義されるbindメソッドの1つを呼び出すことによってバインドできます。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 「インターネット・プロトコル」ソケットのサーバー・ソケット・チャネルでは、次のオプションがサポートされます:

ソケット・オプション
オプション名 説明
SO_RCVBUF ソケット受信バッファのサイズ
SO_REUSEADDR アドレスを再利用します

「Unixドメイン」ソケットのサーバー・ソケット・チャネルでは、次のものがサポートされます:

ソケット・オプション
オプション名 説明
SO_RCVBUF ソケット受信バッファのサイズ

追加(実装固有)のオプションをサポートできる場合もあります。

サーバー・ソケット・チャネルは、複数の並行スレッドで安全に使用できます。

導入されたバージョン:
1.4
  • コンストラクタの詳細

    • ServerSocketChannel

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

    • open

      public static ServerSocketChannel open() throws IOException
      「インターネット・プロトコル」ソケットのサーバー・ソケット・チャネルを開きます。

      システム全体のデフォルトSelectorProviderオブジェクトのopenServerSocketChannelメソッドを呼び出すことで、新しいチャネルが作成されます。

      新しいチャネルのソケットは、初期状態では未バインドです。ソケットのbindメソッドの1つを使って特定のアドレスにバインドしないと、接続は受け付けられません。

      戻り値:
      新しいソケット・チャネル
      例外:
      IOException - 入出力エラーが発生した場合
      関連項目:
    • open

      public static ServerSocketChannel open(ProtocolFamily family) throws IOException
      サーバー・ソケット・チャネルをオープンします。 familyパラメータは、チャネル・ソケットのprotocol familyを指定します。

      新しいチャネルは、システム全体のデフォルトSelectorProviderオブジェクトのopenServerSocketChannel(ProtocolFamily)メソッドを呼び出すことで作成されます。

      パラメータ:
      family - プロトコル・ファミリ
      戻り値:
      新しいソケット・チャネル
      例外:
      UnsupportedOperationException - 指定されたプロトコル・ファミリがサポートされていない場合。 たとえば、パラメータにStandardProtocolFamily.INET6が指定されているが、IPv6がプラットフォームで有効になっていないとします。
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      15
      関連項目:
    • validOps

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

      サーバー・ソケット・チャネルは、新しい接続の受け付けだけをサポートします。したがって、このメソッドはSelectionKey.OP_ACCEPTを返します。

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

      public final ServerSocketChannel bind(SocketAddress local) throws IOException
      チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。

      このメソッドの呼出しは次と同等です。

          bind(local, 0);
      

      定義:
      bind、インタフェースNetworkChannel
      パラメータ:
      local - ソケットのバインド先のローカル・アドレス、または自動的に割り当てられるソケット・アドレスにバインドする場合はnull
      戻り値:
      このチャネル
      例外:
      AlreadyBoundException - ソケットがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      ClosedChannelException - チャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされていて、演算が拒否された場合
      導入されたバージョン:
      1.7
      関連項目:
    • bind

      public abstract ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
      チャネルのソケットをローカル・アドレスにバインドし、接続を待機するようソケットを構成します。

      このメソッドは、ソケットとローカル・アドレスとの間の関連付けを確立するために使用されます。 「インターネット・プロトコル」ソケットの場合、関連付けが確立されると、ソケットはチャネルがクローズされるまでバインドされたままになります。

      backlogパラメータは、ソケットの保留されている接続の最大数です。 正確なセマンティックスは実装に固有です。 特に、実装には最大長がかかる場合や、パラメータをすべて無視することを選択できる場合があります。 backlogパラメータの値が0または負の値の場合、実装固有のデフォルトが使用されます。

      APIのノート:
      「Unixドメイン」ソケットのサーバー・ソケット・チャネルをバインドすると、UnixDomainSocketAddressのファイル・パスに対応するファイルが作成されます。 このファイルはチャネルがクローズされた後も保持され、別のソケットを同じ名前にバインドする前に削除する必要があります。 nullアドレスにバインドすると、ソケットはシステムの一時的なロケーションにある一意のファイルに「自動」でバインドされます。 関連付けられたソケット・ファイルは、チャネルがクローズされた後も保持されます。 その名前は、チャネルのローカル・ソケット・アドレスから取得できます。
      実装上のノート:
      各プラットフォームでは、「Unixドメイン」ソケットの名前に対して実装固有の最大長が適用されます。 この制限は、チャネルがバインドされるときに適用されます。 通常、最大長は100バイト以下です。 この制限は、「自動」バウンドのサーバー・ソケット・チャネルにも適用されます。 これらのソケットが作成される一時ディレクトリの選択に使用できる「Unixドメイン」 「ネットワーキング・プロパティ」を参照してください。
      パラメータ:
      local - ソケットのバインド先のアドレス、または自動的に割り当てられるソケット・アドレスにバインドする場合はnull
      backlog - 保留されている接続の最大数。
      戻り値:
      このチャネル
      例外:
      AlreadyBoundException - ソケットがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされていて、そのcheckListenメソッドが「インターネット・プロトコル」ソケット・アドレス、またはNetPermission("accessUnixDomainSocket")を拒否する場合は「Unixドメイン」ソケット・アドレスの演算を拒否する場合。
      導入されたバージョン:
      1.7
    • setOption

      public abstract <T> ServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException
      インタフェースからコピーされた説明: NetworkChannel
      ソケット・オプションの値を設定します。
      定義:
      setOption、インタフェースNetworkChannel
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      value - ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      戻り値:
      このチャネル
      例外:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      IllegalArgumentException - 値がこのソケット・オプションに対して有効な値でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      1.7
      関連項目:
    • socket

      public abstract ServerSocket socket()
      このチャネルに関連したサーバー・ソケットを取得します。

      返されるオブジェクトは、ServerSocketクラスで宣言されていないpublicメソッドは宣言しません。

      戻り値:
      このチャネルに関連したサーバー・ソケット
      例外:
      UnsupportedOperationException - チャネル・ソケットが「インターネット・プロトコル」ソケットでない場合
    • accept

      public abstract SocketChannel accept() throws IOException
      このチャネルのソケットに対する接続を受け付けます。

      このチャネルが非ブロッキング・モードの場合、保留中の接続がない場合、このメソッドはすぐにnullを返します。 それ以外の場合、新しい接続が利用可能になるか、入出力エラーが発生するまで無期限にブロックされます。

      このメソッドによって返されるソケット・チャネルは、このチャネルがブロック・モードであってもそうでなくてもブロック・モードになります。

      「インターネット・プロトコル」ソケット・アドレスにバインドされている場合、このメソッドはServerSocketクラスのacceptメソッドとまったく同じセキュリティ・チェックを実行します。 セキュリティ・マネージャがインストールされている場合、このメソッドは、新しい各接続のリモート・エンドポイントのアドレスとポート番号がセキュリティ・マネージャのcheckAcceptメソッドによって許可されていることを確認します。 「Unixドメイン」ソケット・アドレスにバインドされている場合、このメソッドはNetPermission("accessUnixDomainSocket")をチェックします。

      戻り値:
      新しい接続のソケット・チャネル。このチャネルが非ブロッキング・モードであり、受け入れ可能な接続がない場合はnull
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 受け付け操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 受け付け操作の進行中に、現在のスレッドに対して別のスレッドから割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      NotYetBoundException - このチャネルのソケットが未バインドの場合
      SecurityException - セキュリティ・マネージャがインストールされており、このチャネルがInetSocketAddressにバインドされており、セキュリティ・マネージャが新しい接続のリモート・エンドポイントへのアクセスを拒否する場合、またはこのチャネルがUnixDomainSocketAddressにバインドされ、セキュリティ・マネージャがNetPermission("accessUnixDomainSocket")を拒否する場合
      IOException - その他の入出力エラーが発生した場合
    • getLocalAddress

      public abstract SocketAddress getLocalAddress() throws IOException
      このチャネルのソケットがバインドされているソケット・アドレスを返します。

      チャネルがInternet Protocolソケット・アドレスにバインドされている場合は、このメソッドからの戻り値の型はInetSocketAddressです。 セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddressが返されます。

      チャネルが「Unixドメイン」ソケット・アドレスにバインドされている場合、ソケット・アドレスはUnixDomainSocketAddressです。 セキュリティ・マネージャが設定されている場合は、そのcheckPermissionメソッドがNetPermission ("accessUnixDomainSocket")でコールされます。 演算が許可されていない場合は、名前のないUnixDomainSocketAddressが返されます。

      定義:
      getLocalAddress、インタフェースNetworkChannel
      戻り値:
      ソケットがバインドされているSocketAddress、ループバック・アドレスを表すSocketAddress、セキュリティ・マネージャによって拒否された場合は空のパス、またはチャネル・ソケットがバインドされていない場合はnull
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合