モジュール java.base
パッケージ java.nio.channels

クラスSocketChannel

java.lang.Object
すべての実装されたインタフェース:
Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, NetworkChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel

public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
ストリーム型接続ソケット用の選択可能チャネルです。

ソケット・チャネルは、このクラスのopenメソッドのいずれかを呼び出して作成されます。 no-arg openメソッドは、「インターネット・プロトコル」ソケットのソケット・チャネルを開きます。 open(ProtocolFamily)メソッドは、指定されたプロトコル・ファミリのソケットのソケット・チャネルを開くために使用されます。 任意の既存のソケット用にチャネルを作成することはできません。 新しく作成されたソケット・チャネルはオープンですが、接続は確立されていません。 未接続のチャネルに対して入力操作を呼び出そうとすると、NotYetConnectedExceptionがスローされます。 ソケット・チャネルを接続するには、connectメソッドを呼び出します。接続されたソケット・チャネルは、クローズするまで接続されたままになります。 ソケット・チャネルが接続されているかどうかは、isConnectedメソッドの呼出しによって判断できます。

ソケット・チャネルは非ブロック接続をサポートします。ソケット・チャネルの作成とリモート・ソケットへのリンクの確立プロセスはconnectメソッドによって開始され、後でfinishConnectメソッドによって完了します。 接続操作が実行中であるかどうかは、isConnectionPendingメソッドの呼出しによって判断できます。

ソケット・チャネルでは、Channelクラスで指定された非同期クローズ演算と同様の「非同期シャットダウン」がサポートされます。 ソケットの入力側が1つのスレッドによってシャットダウンされ、別のスレッドがソケットのチャネルの読み取り操作でブロックされている場合、ブロックされているスレッドの読み取り操作はバイトを読み取らずに完了し、-1を返します。 一方のスレッドがソケットのチャネルに対する書込み操作の途中でブロックされているのに、もう一方のスレッドがソケットの出力側を停止した場合、ブロックされたスレッドはAsynchronousCloseExceptionを受け取ります。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 「インターネット・プロトコル」ソケットのソケット・チャネルでは、次のオプションがサポートされます:

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_KEEPALIVE 接続をキープアライブにします
SO_REUSEADDR アドレスを再利用します
SO_LINGER 閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ)
TCP_NODELAY Nagleアルゴリズムを無効にします

「Unixドメイン」ソケットのソケット・チャネルでは、次のものがサポートされます:

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_LINGER 閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ)

追加(実装固有)のオプションをサポートできる場合もあります。

ソケット・チャネルは、複数の並行スレッドで安全に使用できます。 データグラム・チャネルは並行読取りおよび書込みをサポートします。ただし、読取りを行うスレッドも書込みを行うスレッドも特定の時点では常に1個以下です。 connectメソッドとfinishConnectメソッドは相互に同期しており、いずれかのメソッドの呼出し中に読み込みまたは書込み操作を開始しようとすると、この処理はその呼出しが完了するまでブロックされます。

導入されたバージョン:
1.4