非ブロッキング I/O

アプリケーションがいずれかのソケット入力 API を発行したときに、 読み取るデータがない場合、API はブロック化し、読み取るデータができるまで戻りません。

同様に、データを即時に送信できない場合、アプリケーションはソケット出力 API をブロックします。 最終的に connect() および accept() は、 パートナーのプログラムとの接続の確立を待機している間にブロックできます。

ソケットは、ブロック化する API をアプリケーション・プログラムが発行しても、 遅延なく API が戻るようにする方法を提供します。 これは、O_NONBLOCK フラグをオンにするために fcntl() を呼び出すか、FIONBIO フラグをオンにするために ioctl() を呼び出すことによって行われます。 この非ブロッキング・モードを実行すると、API がブロック化によって完了できない場合でも、API は即時に戻ります。 connect() が [EINPROGRESS] と一緒に戻ることがあります。 これは、接続が開始済みであることを示します。 その後、poll() または select() を使用して、接続がいつ完了したかを判別することができます。非ブロッキング・モードでの実行に影響を受ける他のすべての API については、[EWOULDBLOCK] というエラー・コードによって、呼び出しが成功しなかったことが示されます。

以下のソケット API で非ブロッキングを使用できます。