fcntl〜ソケット通信を非ブロッキングで行う〜
目次に戻る
前回selectを使うことで非ブロッキングに送受信(send,recv)ができる。と紹介しましたが、 selectではconnect関数を非ブロッキングに実行する事ができません。connectを非ブロッ キングで行うには、fctlを使います。ただし、これはUNIXオンリ〜です。Winsockでも同様 の関数が用意されていますが、それは明日紹介します。
使い方は簡単。ソケットを socket関数 で生成したら、それに対して非ブロッキングの 設定 を行えば良いのです。
/* ソケット通信を非ブロッキングに行うように設定する */
fcntl( fd , F_SETFL , O_NONBLOCK );
ちなみに、非ブロッキングモードではconnect関数はEINPROGRESSを返す。(Winsockで は、WSAGetLastError関数を読んだ戻り値が WSAEWOULDBLOCK になる)
目次に戻る