JavaTM 2 Platform
Standard Ed. 5.0

java.net
インタフェース SocketOptions

既知の実装クラスの一覧:
DatagramSocketImpl, SocketImpl

public interface SocketOptions

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

このインタフェースでオプションを指定しているメソッドと定数は、実装のためだけのものです。SocketImpl または DatagramSocketImpl をサブクラス化しない場合は、これらを直接使用しないでください。Socket、ServerSocket、DatagramSocket、および MulticastSocket 内のそれぞれのオプションを取得および設定するための、型に対して安全なメソッドがあるのでそれを使います。


フィールドの概要
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 ソケットに KeepAlive オプションが設定されていて、ソケットを介してどちらの方向にもデータが 2 時間 (注: 実際の値は実装による) の間交換されていない場合、TCP は自動的に KeepAlive プローブをピアへ送信します。
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_SNDBUF
          送信ネットワーク入出力用としてプラットフォームで使われるバッファのサイズのヒントを設定します。
static int SO_TIMEOUT
          ソケット操作のブロックにタイムアウトを設定します。
static int TCP_NODELAY
          この接続に使う Nagle のアルゴリズムを無効にします。
 
メソッドの概要
 Object getOption(int optID)
          オプションの値を取得します。
 void setOption(int optID, Object value)
          optID で指定されたオプションを有効または無効にします。
 

フィールドの詳細

TCP_NODELAY

static final int TCP_NODELAY
この接続に使う Nagle のアルゴリズムを無効にします。以前に書き込まれたデータが承認されるまで、ネットワークに書き込まれるデータはバッファに格納されません。

TCP だけに有効: SocketImpl

関連項目:
Socket.setTcpNoDelay(boolean), Socket.getTcpNoDelay(), 定数フィールド値

SO_BINDADDR

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

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

有効: SocketImpl、DatagramSocketImpl

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

SO_REUSEADDR

static final int SO_REUSEADDR
ソケットの SO_REUSEADDR を設定します。これは java の MulticastSockets にだけ使用されるもので、MulticastSockets にはデフォルトで設定されています。

有効: DatagramSocketImpl

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

SO_BROADCAST

static final int SO_BROADCAST
ソケットの SO_BROADCAST を設定します。このオプションは、ブロードキャストメッセージを送信する機能を有効または無効にします。これは、データグラムソケット用に、ブロードキャストメッセージの概念をサポートするネットワーク (たとえば、Ethernet やトークンリングなど) 上でだけサポートされ、デフォルトでは DatagramSockets 用に設定されています。

導入されたバージョン:
1.4
関連項目:
定数フィールド値

IP_MULTICAST_IF

static final int IP_MULTICAST_IF
マルチキャストパケットを送信する送出インタフェースをどれにするか設定します。複数のネットワークインタフェースを持つホストで、アプリケーションがシステムのデフォルト以外のインタフェースを使わなければならない場合に便利です。InetAddress を取得したり、返したりします。

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

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

IP_MULTICAST_IF2

static final int IP_MULTICAST_IF2
上記と同じです。このオプションは、IP_MULTICAST_IF を使用した動作を以前と同じに保持するために導入されました。また、この新しいオプションは、IPv4 または IPv6 アドレスを使用した送出インタフェースの設定をサポートできます。 注: これと矛盾しないようにしてください。

導入されたバージョン:
1.4
関連項目:
MulticastSocket.setNetworkInterface(NetworkInterface), MulticastSocket.getNetworkInterface(), 定数フィールド値

IP_MULTICAST_LOOP

static final int IP_MULTICAST_LOOP
このオプションは、マルチキャストデータグラムのローカルループバックを有効または無効にします。デフォルトでは、このオプションはマルチキャストソケット用に有効になっています。

導入されたバージョン:
1.4
関連項目:
定数フィールド値

IP_TOS

static final int IP_TOS
このオプションは、TCP または UDP ソケットの IP ヘッダのサービスの型またはトラフィッククラスフィールドを設定します。

導入されたバージョン:
1.4
関連項目:
定数フィールド値

SO_LINGER

static final int SO_LINGER
linger-on-close タイムアウトを指定します。このオプションは、TCP ソケットの close() を即座に返す処理を有効または無効にします。このオプションにゼロでない整数のタイムアウトを指定して有効にすると、close() はブロックされて、ピアに書き込まれる全データの転送、および承認を延期させ、その時点でソケットを閉じます。遅延タイムアウトに到達した時点で、ソケットは TCP RST で強制的に閉じられます。タイムアウトゼロでこのオプションを有効にすると、即座に強制的に (ソケットを) 閉じます。指定されたタイムアウトが 65,535 を超えている場合は、65,535 に設定されます。

TCP にだけ有効: SocketImpl

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

SO_TIMEOUT

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

static final int SO_SNDBUF
送信ネットワーク入出力用としてプラットフォームで使われるバッファのサイズのヒントを設定します。設定で使われる場合は、ソケットで送信するデータに使われるバッファのサイズについては、アプリケーションからカーネルへの推奨値になります。取得で使われる場合は、このソケットでデータを送信するときにプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットで有効: SocketImpl、DatagramSocketImpl

関連項目:
Socket.setSendBufferSize(int), Socket.getSendBufferSize(), DatagramSocket.setSendBufferSize(int), DatagramSocket.getSendBufferSize(), 定数フィールド値

SO_RCVBUF

static final int SO_RCVBUF
着信ネットワーク入出力用としてプラットフォームで使われるバッファのサイズのヒントを設定します。設定で使われる場合は、ソケットでデータを受信するときに使われるバッファのサイズについては、アプリケーションからカーネルへの推奨値になります。取得で使われる場合は、このソケットでデータを受信するときにプラットフォームが実際に使用するバッファのサイズが返されます。 すべてのソケットで有効: SocketImpl、DatagramSocketImpl

関連項目:
Socket.setReceiveBufferSize(int), Socket.getReceiveBufferSize(), DatagramSocket.setReceiveBufferSize(int), DatagramSocket.getReceiveBufferSize(), 定数フィールド値

SO_KEEPALIVE

static final int SO_KEEPALIVE
TCP ソケットに KeepAlive オプションが設定されていて、ソケットを介してどちらの方向にもデータが 2 時間 (注: 実際の値は実装による) の間交換されていない場合、TCP は自動的に KeepAlive プローブをピアへ送信します。このプローブは、ピアが応答する必要のある TCP セグメントです。次の 3 つのうちのどれかが考えられます。1. ピアは予想される ACK で応答する。万事支障ないため、アプリケーションには通知しない。TCP は、さらに 2 時間データ交換が行われないと、プローブを送信する。2. ピアは、ピアホストがクラッシュし再起動したローカル TCP を示す RST で応答する。ソケットは閉じられる。3. ピアからの応答がない。ソケットは閉じられる このオプションの目的は、ピアホストがクラッシュした場合に検出することです。 TCP ソケットにだけ有効: SocketImpl

関連項目:
Socket.setKeepAlive(boolean), Socket.getKeepAlive(), 定数フィールド値

SO_OOBINLINE

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, new Boolean(true)); // OK - enables TCP_NODELAY, a binary option

Boolean(false) とともにこのメソッドを使うと、任意のオプションを無効にできます。
 s.setOption(TCP_NODELAY, new Boolean(false)); // OK - disables TCP_NODELAY s.setOption(SO_LINGER, new Boolean(false)); // OK - disables SO_LINGER 

オンオフの通知があり、boolean 型でないパラメータが必要なオプションについては、この値を 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)

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。