-
- 既知のすべての実装クラス:
DatagramSocketImpl
,SocketImpl
public interface SocketOptions
ソケット・オプションを取得/設定するメソッドのインタフェース。 このインタフェースはSocketImplとDatagramSocketImplによって実装されています。 これらのサブクラスで独自のオプションをサポートするには、このインタフェースのメソッドをオーバーライドしてください。このインタフェース内の、オプションを指定するためのメソッドと定数は、実装専用です。 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のアルゴリズムを無効にします。
-
-
-
フィールドの詳細
-
TCP_NODELAY
@Native static final int TCP_NODELAY
この接続でNagleのアルゴリズムを無効にします。 ネットワークに書き込まれたデータは、以前に書き込まれたデータが確認されるまでバッファ内に格納されません。TCPだけに有効: SocketImpl。
-
SO_BINDADDR
@Native static final int SO_BINDADDR
ソケットのローカル・アドレスへのバインドを取得します。このオプションを「設定」することはできません。行えるのは「取得」のみです。なぜなら、ソケットは作成時にバインドされるため、ローカルでバインドされたアドレスは変更できないからです。 ソケットのデフォルトのローカル・アドレスは、INADDR_ANYです。これは、マルチホームのホスト上にある任意のローカル・アドレスを意味します。 マルチホームのホストは、このオプションを使用することで、複数のアドレスの1つだけで接続を受け入れたり(ServerSocketまたはDatagramSocketの場合)、ピアへのリターン・アドレスを指定したり(SocketまたはDatagramSocketの場合)できます。 このオプションのパラメータは、InetAddressです。このオプションは、コンストラクタの中で指定されなければいけません。
有効: SocketImpl、DatagramSocketImpl
-
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
-
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
-
SO_TIMEOUT
@Native static final int SO_TIMEOUT
ソケット操作のブロックにタイム・アウトを設定します。ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
このオプションは、ブロック処理に入る前に設定してください。そうしないと効果がありません。 タイムアウトの期限が切れても操作のブロックが継続している場合、java.io.InterruptedIOExceptionが発行されます。 この場合、ソケットはクローズされません。
すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl
-
SO_SNDBUF
@Native static final int SO_SNDBUF
プラットフォームが送信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。 設定時に使用された場合、これは、ソケット経由で送信するデータ用のバッファのサイズに関する、アプリケーションからカーネルへの推奨値になります。 取得時に使用された場合、これは、このソケット上でのデータ送信時にプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl
-
SO_RCVBUF
@Native static final int SO_RCVBUF
プラットフォームが受信時のネットワーク入出力用として使用するバッファのサイズのヒントを設定します。 設定時に使用された場合、これは、ソケット経由で受信するデータ用のバッファのサイズに関する、アプリケーションからカーネルへの推奨値になります。 取得時に使用された場合、これは、このソケット上でのデータ受信時にプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットに対して有効: SocketImpl、DatagramSocketImpl
-
SO_KEEPALIVE
@Native static final int SO_KEEPALIVE
TCPソケットでキープアライブ・オプションが設定されていて、2時間(注: 実際の値は実装に依存する)の間、そのソケット経由でどちらの向きにもデータが交換されなかった場合、TCPは自動的に、キープアライブ・プローブをピアに送信します。 このプローブは、ピアが応答しなければいけないTCPセグメントです。 予想される応答は、次の3つのうちのいずれかです。 1. ピアは予想されるACKで応答する。 アプリケーションには通知されない(何も問題がないため)。 その後、非活動状態が2時間続くと、TCPは再度プローブを送信する。 2. ピアがRSTで応答する。これは、ピアのホストがクラッシュし、リブートしたことをローカルTCPに伝える役割を果たす。 ソケットはクローズされる。 3. ピアからの応答がない。 ソケットはクローズされる。 このオプションの目的は、ピア・ホストがクラッシュした場合に検出することです。 TCPソケットにだけ有効: SocketImpl
-
SO_OOBINLINE
@Native static final int SO_OOBINLINE
OOBINLINEオプションが設定された場合、そのソケット上で受信されるTCP緊急データはすべて、そのソケットの入力ストリーム経由で受信されます。 このオプションが無効になっている場合(それがデフォルト)、緊急データは何の通知もなく破棄されます。
-
-
メソッドの詳細
-
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
−ソケットが閉じられている場合SocketException
−optIDがプロトコル・スタック(SocketImplを含む)に基づいて未知である場合- 関連項目:
setOption(int, java.lang.Object)
-
-