ソケットがノンブロッキングに設定されている場合、
しかし、ある時点で、このソケットでブロッキングモードで send または recv を使用したいのですが、
一時的にブロック モードとして送信し、非ブロック モードに戻すことはできますか。
もしそうなら、逆はどうですか?ソケットがブロッキング モードの場合、一時的に非ブロッキング モードで send または recv を使用しますか?
ありがとう!
ソケットがノンブロッキングに設定されている場合、
しかし、ある時点で、このソケットでブロッキングモードで send または recv を使用したいのですが、
一時的にブロック モードとして送信し、非ブロック モードに戻すことはできますか。
もしそうなら、逆はどうですか?ソケットがブロッキング モードの場合、一時的に非ブロッキング モードで send または recv を使用しますか?
ありがとう!
フラグfcntl()
で使用できます。O_NONBLOCK
これを使用してソケットをブロッキング モードに設定し、データを送信 (または受信)し、fcntl
再度使用してソケットを非ブロッキング モードに設定します。
一時的にブロック モードとして送信し、非ブロック モードに戻すことはできますか。
はい、もちろん、FIONBIO を逆に使用してください。
もしそうなら、逆はどうですか?ソケットがブロッキング モードの場合、一時的に非ブロッキング モードで send または recv を使用しますか?
はい、もちろん。これには 2 つの方法があります。FIONBIO を使用する方法と、recv() に MSG_DONTWAIT フラグを使用する方法です。
モードを変更したり、 or を使用して、通常はブロックする を実行する前にソケットが読み取り/書き込み可能であることを検出しselect()
たり、目的のデータがまだ保留されている間にループで読み取り/送信することでブロック動作をシミュレートしたりできます。epoll()
recv/send()