モジュール java.base
パッケージ java.net

インタフェースSocketOptions

  • 既知のすべての実装クラス:
    DatagramSocketImpl, SocketImpl

    public interface SocketOptions
    ソケット・オプションを取得/設定するメソッドのインタフェース。 このインタフェースはSocketImplDatagramSocketImplによって実装されています。 これらのサブクラスで独自のオプションをサポートするには、このインタフェースのメソッドをオーバーライドしてください。

    このインタフェース内の、オプションを指定するためのメソッドと定数は、実装専用です。 SocketImplまたはDatagramSocketImplのサブクラスを作成しない場合には、これらを直接使用しないでください Socket、ServerSocket、DatagramSocket、およびMulticastSocketには、これらの各オプションを取得/設定するための型保証されたメソッドが存在しています。

    導入されたバージョン:
    1.1
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      static int IP_MULTICAST_IF
      マルチキャスト・パケットを送信する送出インタフェースをどれにするか設定します。
      static int IP_MULTICAST_IF2
      上記と同じです。
      static int IP_MULTICAST_LOOP
      このオプションは、マルチキャスト・データグラムのローカル・ループバックを有効または無効にします。
      static int IP_TOS
      このオプションは、TCPまたはUDPソケットのIPヘッダーのサービスの型またはトラフィック・クラス・フィールドを設定します。
      static int SO_BINDADDR
      ソケットのローカル・アドレスへのバインドを取得します。このオプションを「設定」することはできません。行えるのは「取得」のみです。なぜなら、ソケットは作成時にバインドされるため、ローカルでバインドされたアドレスは変更できないからです。
      static int SO_BROADCAST
      ソケットのSO_BROADCASTを設定します。
      static int SO_KEEPALIVE
      TCPソケットでキープアライブ・オプションが設定されていて、2時間(注: 実際の値は実装に依存する)の間、そのソケット経由でどちらの向きにもデータが交換されなかった場合、TCPは自動的に、キープアライブ・プローブをピアに送信します。
      static int SO_LINGER
      linger-on-closeタイム・アウトを指定します。
      static int SO_OOBINLINE
      OOBINLINEオプションが設定された場合、そのソケット上で受信されるTCP緊急データはすべて、そのソケットの入力ストリーム経由で受信されます。
      static int SO_RCVBUF
      プラットフォームが受信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。
      static int SO_REUSEADDR
      ソケットのSO_REUSEADDRを設定します。
      static int SO_REUSEPORT
      ソケットのSO_REUSEPORTを設定します。
      static int SO_SNDBUF
      プラットフォームが送信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。
      static int SO_TIMEOUT
      ソケット操作のブロックにタイム・アウトを設定します。
      static int TCP_NODELAY
      この接続でNagleのアルゴリズムを無効にします。
    • フィールドの詳細

      • SO_BINDADDR

        @Native
        static final int SO_BINDADDR
        ソケットのローカル・アドレスへのバインドを取得します。このオプションを「設定」することはできません。行えるのは「取得」のみです。なぜなら、ソケットは作成時にバインドされるため、ローカルでバインドされたアドレスは変更できないからです。 ソケットのデフォルトのローカル・アドレスは、INADDR_ANYです。これは、マルチホームのホスト上にある任意のローカル・アドレスを意味します。 マルチホームのホストは、このオプションを使用することで、複数のアドレスの1つだけで接続を受け入れたり(ServerSocketまたはDatagramSocketの場合)、ピアへのリターン・アドレスを指定したり(SocketまたはDatagramSocketの場合)できます。 このオプションのパラメータは、InetAddressです。

        このオプションは、コンストラクタの中で指定されなければいけません

        有効: SocketImpl、DatagramSocketImpl

        関連項目:
        Socket.getLocalAddress(), DatagramSocket.getLocalAddress(), 定数フィールド値
      • SO_REUSEADDR

        @Native
        static final int SO_REUSEADDR
        ソケットのSO_REUSEADDRを設定します。 これは、javaではMulticastSocket専用であり、MulticastSocketではデフォルトで設定されます。

        有効: DatagramSocketImpl

        関連項目:
        定数フィールド値
      • SO_REUSEPORT

        @Native
        static final int SO_REUSEPORT
        ソケットのSO_REUSEPORTを設定します。 このオプションは、複数のソケットが同じアドレスとポートをリッスンするようにする機能を有効または無効にします。

        有効: SocketImpl、DatagramSocketImpl

        導入されたバージョン:
        9
        関連項目:
        StandardSocketOptions.SO_REUSEPORT, 「定数フィールド値」
      • SO_BROADCAST

        @Native
        static final int SO_BROADCAST
        ソケットのSO_BROADCASTを設定します。 このオプションは、ブロードキャスト・メッセージを送信する機能を有効または無効にします。 これがサポートされるのは、Ethernetやトークン・リングといったブロードキャスト・メッセージの概念をサポートするネットワーク上のデータグラム・ソケットに対してだけです。DatagramSocketではこれがデフォルトで設定されます。
        導入されたバージョン:
        1.4
        関連項目:
        定数フィールド値
      • IP_MULTICAST_IF

        @Native
        static final int IP_MULTICAST_IF
        マルチキャスト・パケットを送信する送出インタフェースをどれにするか設定します。 複数のネットワーク・インタフェースを持つホスト上で、アプリケーションがシステムのデフォルト以外を使用する必要がある場合に役立ちます。 InetAddressを取得したり、返したりします。

        マルチキャストに有効: DatagramSocketImpl

        関連項目:
        MulticastSocket.setInterface(InetAddress), MulticastSocket.getInterface(), 定数フィールド値
      • IP_MULTICAST_IF2

        @Native
        static final int IP_MULTICAST_IF2
        上記と同じです。 このオプションの導入目的は、IP_MULTICAST_IFの動作は以前と同じに保ちつつ、IPv4アドレス、IPv6アドレスのいずれかによる送出インタフェースの設定をこの新しいオプションでサポートできるようにすることです。 注: これとの衝突が発生しないように注意してください
        導入されたバージョン:
        1.4
        関連項目:
        MulticastSocket.setNetworkInterface(NetworkInterface), MulticastSocket.getNetworkInterface(), 定数フィールド値
      • IP_MULTICAST_LOOP

        @Native
        static final int IP_MULTICAST_LOOP
        このオプションは、マルチキャスト・データグラムのローカル・ループバックを有効または無効にします。 マルチキャスト・ソケットでは、このオプションがデフォルトで有効になります。
        導入されたバージョン:
        1.4
        関連項目:
        定数フィールド値
      • IP_TOS

        @Native
        static final int IP_TOS
        このオプションは、TCPまたはUDPソケットのIPヘッダーのサービスの型またはトラフィック・クラス・フィールドを設定します。
        導入されたバージョン:
        1.4
        関連項目:
        定数フィールド値
      • SO_LINGER

        @Native
        static final int SO_LINGER
        linger-on-closeタイム・アウトを指定します。 このオプションは、TCPソケットのclose()からの即時リターンを無効または有効にします。 0以外の整数のタイムアウトを使ってこのオプションを有効にした場合、ピアに書き込まれたすべてのデータの送信と確認が完了するまでclose()がブロックされます。そして、それらが完了した時点でソケットは正常にクローズされます。 遅延タイムアウトに達すると、ソケットはTCP RSTで強制的にクローズされます。 0のタイム・アウトでこのオプションを有効にした場合、すぐに強制クローズが実行されます。 指定されたタイム・アウト値が65,535を超えている場合、その値は65,535に減らされます。

        TCPにだけ有効: SocketImpl

        関連項目:
        Socket.setSoLinger(boolean, int), Socket.getSoLinger(), 定数フィールド値
      • SO_TIMEOUT

        @Native
        static final int SO_TIMEOUT
        ソケット操作のブロックにタイム・アウトを設定します。
         ServerSocket.accept();
         SocketInputStream.read();
         DatagramSocket.receive();
         

        このオプションは、ブロック処理に入る前に設定してください。そうしないと効果がありません。 タイムアウトの期限が切れても操作のブロックが継続している場合、java.io.InterruptedIOExceptionが発行されます。 この場合、ソケットはクローズされません。

        すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl

        関連項目:
        Socket.setSoTimeout(int), ServerSocket.setSoTimeout(int), DatagramSocket.setSoTimeout(int), 定数フィールド値
      • SO_SNDBUF

        @Native
        static final int SO_SNDBUF
        プラットフォームが送信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。 設定時に使用された場合、これは、ソケット経由で送信するデータ用のバッファのサイズに関する、アプリケーションからカーネルへの推奨値になります。 取得時に使用された場合、これは、このソケット上でのデータ送信時にプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl
        関連項目:
        Socket.setSendBufferSize(int), Socket.getSendBufferSize(), DatagramSocket.setSendBufferSize(int), DatagramSocket.getSendBufferSize(), 定数フィールド値
      • SO_RCVBUF

        @Native
        static final int SO_RCVBUF
        プラットフォームが受信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。 設定時に使用された場合、これは、ソケット経由で受信するデータ用のバッファのサイズに関する、アプリケーションからカーネルへの推奨値になります。 取得時に使用された場合、これは、このソケット上でのデータ受信時にプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl
        関連項目:
        Socket.setReceiveBufferSize(int), Socket.getReceiveBufferSize(), DatagramSocket.setReceiveBufferSize(int), DatagramSocket.getReceiveBufferSize(), 定数フィールド値
      • SO_KEEPALIVE

        @Native
        static final int SO_KEEPALIVE
        TCPソケットでキープアライブ・オプションが設定されていて、2時間(注: 実際の値は実装に依存する)の間、そのソケット経由でどちらの向きにもデータが交換されなかった場合、TCPは自動的に、キープアライブ・プローブをピアに送信します。 このプローブは、ピアが応答しなければいけないTCPセグメントです。 予想される応答は、次の3つのうちのいずれかです。 1. ピアは予想されるACKで応答する。 アプリケーションには通知されない(何も問題がないため)。 その後、非活動状態が2時間続くと、TCPは再度プローブを送信する。 2. ピアがRSTで応答する。これは、ピアのホストがクラッシュし、リブートしたことをローカルTCPに伝える役割を果たす。 ソケットはクローズされる。 3. ピアからの応答がない。 ソケットはクローズされる。 このオプションの目的は、ピア・ホストがクラッシュした場合に検出することです。 TCPソケットにだけ有効: SocketImpl
        関連項目:
        Socket.setKeepAlive(boolean), Socket.getKeepAlive(), 定数フィールド値
      • SO_OOBINLINE

        @Native
        static final int SO_OOBINLINE
        OOBINLINEオプションが設定された場合、そのソケット上で受信されるTCP緊急データはすべて、そのソケットの入力ストリーム経由で受信されます。 このオプションが無効になっている場合(それがデフォルト)、緊急データは何の通知もなく破棄されます。
        関連項目:
        Socket.setOOBInline(boolean), Socket.getOOBInline(), 定数フィールド値
    • メソッドの詳細

      • setOption

        void setOption​(int optID,
                       Object value)
                throws SocketException
        optIDで指定されたオプションを有効または無効にします。 有効にすべきオプションがオプションに固有の「値」を取る場合、その値をvalueに指定します。 値の実際の型はオプションに固有であり、期待される型でない値を渡すとエラーになります。
         SocketImpl s;
         ...
         s.setOption(SO_LINGER, new Integer(10));
            // OK - set SO_LINGER w/ timeout of 10 sec.
         s.setOption(SO_LINGER, new Double(10));
            // ERROR - expects java.lang.Integer
        
        要求されるオプションがバイナリ値の場合は、java.lang.Booleanによる次のメソッドを使って設定できます。
         s.setOption(TCP_NODELAY, Boolean.TRUE);
            // OK - enables TCP_NODELAY, a binary option
         

        このメソッドをBoolean.FALSEで使用すると、どのオプションも無効にすることができます:
         s.setOption(TCP_NODELAY, Boolean.FALSE);
            // OK - disables TCP_NODELAY
         s.setOption(SO_LINGER, Boolean.FALSE);
            // OK - disables SO_LINGER
         

        onとoffの概念を持ち、非ブール型パラメータを必要とするオプションの場合、その値をBoolean.FALSE以外の値に設定すると暗黙的に有効になります。

        オプションが認識されない場合、ソケットが閉じられている場合、あるいはなんらかの低レベルのエラーが発生した場合には、SocketExceptionがスローされます。
        パラメータ:
        optID−オプションのID (識別子)
        value−ソケットのオプションのパラメータ
        例外:
        SocketException−オプションが認識されない場合、ソケットが閉じられている場合、あるいはなんらかの低レベルのエラーが発生した場合
        関連項目:
        getOption(int)
      • getOption

        Object getOption​(int optID)
                  throws SocketException
        オプションの値を取得します。 バイナリ・オプションは、有効な場合はjava.lang.Boolean.TRUE、無効の場合はjava.lang.Boolean.FALSEを返します。例:
         SocketImpl s;
         ...
         Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
         if (noDelay.booleanValue()) {
             // true if TCP_NODELAY is enabled...
         ...
         }
         

        特定の型をパラメータとするオプションの場合、getOption(int)はパラメータ値を返します。それ以外の場合はjava.lang.Boolean.FALSEを返します:

         Object o = s.getOption(SO_LINGER);
         if (o instanceof Integer) {
             System.out.print("Linger time is " + ((Integer)o).intValue());
         } else {
           // the true type of o is java.lang.Boolean.FALSE;
         }
         

        パラメータ:
        optID−取得するオプションを指定したint
        戻り値:
        オプションの値
        例外:
        SocketException−ソケットが閉じられている場合
        SocketExceptionoptIDがプロトコル・スタック(SocketImplを含む)に基づいて未知である場合
        関連項目:
        setOption(int, java.lang.Object)