|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
ソケットのオプションを取得 (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 で指定されたオプションを有効または無効にします。 |
| フィールドの詳細 |
public static final int TCP_NODELAY
TCP だけに有効: SocketImpl
Socket.setTcpNoDelay(boolean),
Socket.getTcpNoDelay()public static final int SO_BINDADDR
このオプションは、コンストラクタの中で指定されなければなりません。
有効: SocketImpl、DatagramSocketImpl
Socket.getLocalAddress(),
Server#getLocalAddress,
DatagramSocket.getLocalAddress()public static final int SO_REUSEADDR
有効: DatagramSocketImpl
public static final int IP_MULTICAST_IF
マルチキャストに有効: DatagramSocketImpl
MulticastSocket.setInterface(java.net.InetAddress),
MulitcastSocket#getInterfacepublic static final int SO_LINGER
TCP にだけ有効: SocketImpl
Socket.setSoLinger(boolean, int),
Socket.getSoLinger()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)public static final int SO_SNDBUF
すべてのソケットに有効: SocketImpl, DatagramSocketImpl
Socket#setSendSize,
Socket.getSendBufferSize(),
DatagramSocket#setSendSize,
DatagramSocket.getSendBufferSize()public static final int SO_RCVBUF
すべてのソケットで有効: SocketImpl, DatagramSocketImpl
Socket#setReceiveSize,
Socket.getReceiveBufferSize(),
DatagramSocket#setReceiveSize,
DatagramSocket.getReceiveBufferSize()| メソッドの詳細 |
public void setOption(int optID,
Object value)
throws SocketException
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
s.setOption(TCP_NODELAY, new Boolean(false));
// OK - disables TCP_NODELAY
s.setOption(SO_LINGER, new Boolean(false));
// OK - disables SO_LINGER
optID - オプションの ID (識別子)value - ソケットのオプションのパラメータ
public Object getOption(int optID)
throws SocketException
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);
}
|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||