Java プラットフォーム 1.2

java.net
インタフェース SocketOptions

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

public abstract interface SocketOptions

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

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

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


フィールドの概要
static int IP_MULTICAST_IF
          マルチキャストパケットを送信する送出インタフェースをどれにするか設定します。
static int SO_BINDADDR
          ソケットのローカルアドレスへのバインドを取得します。
static int SO_LINGER
          閉じるときの待ち時間を指定します。
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(), Server#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), MulitcastSocket#getInterface

SO_LINGER

public static final int SO_LINGER
閉じるときの待ち時間を指定します。このオプションは、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
送信ネットワーク入出力用としてプラットフォームで使われるバッファのサイズのヒントを設定します。設定 (set) で使われる場合は、ソケットでデータを送信するデータに使われるバッファのサイズに関する、アプリケーションからカーネルへの推奨値になります。取得 (get) で使われる場合は、このソケットでデータを送信するときにプラットフォームが実際に使用するバッファのサイズが返されます。

すべてのソケットに有効: SocketImpl, DatagramSocketImpl

関連項目:
Socket#setSendSize, Socket.getSendBufferSize(), DatagramSocket#setSendSize, DatagramSocket.getSendBufferSize()

SO_RCVBUF

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

すべてのソケットで有効: SocketImpl, DatagramSocketImpl

関連項目:
Socket#setReceiveSize, Socket.getReceiveBufferSize(), DatagramSocket#setReceiveSize, DatagramSocket.getReceiveBufferSize()
メソッドの詳細

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(false) 以外に設定すれば、オプションが暗黙のうちに有効になります。
オプションが認識されない場合、ソケットが閉じられている場合、あるいはなんらかの低レベルのエラーが発生した場合には、SocketException がスローされます。
パラメータ:
optID - オプションの ID (識別子)
value - ソケットのオプションのパラメータ
例外:
SocketException - オプションが認識されない場合、ソケットが閉じられている場合、あるいはなんらかの低レベルエラーが発生した場合

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);
 }
 
例外:
SocketException - ソケットが閉じられている場合
SocketException - optID が、プロトコルスタック (SocketImpl を含む) で未知である場合

Java プラットフォーム 1.2

バグや機能要求の報告
新しい javadoc の表示についてのコメントやご提案
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.