0

ソケットがノンブロッキングに設定されている場合、

しかし、ある時点で、このソケットでブロッキングモードで send または recv を使用したいのですが、

一時的にブロック モードとして送信し、非ブロック モードに戻すことはできますか。

もしそうなら、逆はどうですか?ソケットがブロッキング モードの場合、一時的に非ブロッキング モードで send または recv を使用しますか?

ありがとう!

4

4 に答える 4

3

フラグfcntl()で使用できます。O_NONBLOCK

これを使用してソケットをブロッキング モードに設定し、データを送信 (または受信)し、fcntl再度使用してソケットを非ブロッキング モードに設定します。

于 2013-06-14T11:53:57.143 に答える
2

一時的にブロック モードとして送信し、非ブロック モードに戻すことはできますか。

はい、もちろん、FIONBIO を逆に使用してください。

もしそうなら、逆はどうですか?ソケットがブロッキング モードの場合、一時的に非ブロッキング モードで send または recv を使用しますか?

はい、もちろん。これには 2 つの方法があります。FIONBIO を使用する方法と、recv() に MSG_DONTWAIT フラグを使用する方法です。

于 2013-06-14T11:54:18.483 に答える
1

モードを変更したり、 or を使用して、通常はブロックする を実行する前にソケットが読み取り/書き込み可能であることを検出しselect()たり、目的のデータがまだ保留されている間にループで読み取り/送信することでブロック動作をシミュレートしたりできます。epoll()recv/send()

于 2013-06-15T14:55:09.080 に答える