JavaTM 2 Platform
Std. Ed. v1.3

java.net
インタフェース SocketOptions

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

public interface SocketOptions

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

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

基底クラスでは、標準的な BSD スタイルのソケットオプションのサブセットである PlainSocketImpl および PlainDatagramSocketImpl をサポートしています。これらについて、使い方などを簡単に説明します。


フィールドの概要
static int IP_MULTICAST_IF
          マルチキャストパケットを送信する送出インタフェースをどれにするか設定します。
static int SO_BINDADDR
          ソケットのローカルアドレスへのバインドを取得します。
static int SO_KEEPALIVE
          TCP ソケットに KeepAlive オプションが設定されていて、ソケットを介してどちらの方向にもデータが 2 時間 (注: 実際の値は実装による) の間交換されていない場合、TCP は自動的に KeepAlive プローブをピアへ送信します。
static int SO_LINGER
          linger-on-close タイムアウトを指定します。
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

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

TCP だけに有効: SocketImpl

関連項目:
Socket.setTcpNoDelay(boolean), Socket.getTcpNoDelay()

SO_BINDADDR

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

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

有効: SocketImpl、DatagramSocketImpl

関連項目:
Socket.getLocalAddress(), DatagramSocket.getLocalAddress()

SO_REUSEADDR

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

有効: DatagramSocketImpl


IP_MULTICAST_IF

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

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

関連項目:
MulticastSocket.setInterface(java.net.InetAddress), MulticastSocket.getInterface()

SO_LINGER

public 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

public 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

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

SO_RCVBUF

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

SO_KEEPALIVE

public 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()
メソッドの詳細

setOption

public 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

public 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
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.