fcntl〜ソケット通信を非ブロッキングで行う〜


目次に戻る


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


目次に戻る