0

1) ソケットの戻り値の意味にブロッキングとノンブロッキングの違いはありますか? ドキュメントに記載されているように、recv() が select() の前に成功した場合でも 0 を返すことがあります。本当?

osx と win のドキュメントから: 「TCP ソケットの場合、戻り値 0 はピアが接続の半分を閉じたことを意味します。」

2) ブロック ソケットに関する質問: ブロック ソケットでは、SO_RCVTIMEO と SO_SNDTIMEO に 30 秒などの既定値が設定されていると予想しました (getsockopt で確認)。しかし、なぜそれらは0に設定されているのですか?

4

1 に答える 1

1

1) ソケットの戻り値の意味にブロッキングとノンブロッキングの違いはありますか?

いいえ。ただし、可能性のある errno/WSAGetLastError() 値には違いがあります。ノンブロッキング モードでは、可能性に EAGAIN/EWOULDBLOCK が追加されます。

ドキュメントに記載されているように、recv() が select() が成功した後でも 0 を返すことがあります。本当?

いいえ、そうではありません。

osx と win のドキュメントから: 「TCP ソケットの場合、戻り値 0 はピアが接続の半分を閉じたことを意味します。」

正しい。ブロッキング、ノンブロッキングとは関係ありません。あなたの質問の混乱を示唆するものは何もありません。

2) ブロック ソケットに関する質問: ブロック ソケットでは、SO_RCVTIMEO と SO_SNDTIMEO に 30 秒などの既定値が設定されていると予想しました (getsockopt で確認)。

あなたの期待は間違っています。デフォルトでは、両方ともゼロであり、無限を意味します。

しかし、なぜそれらは0に設定されているのですか?

それがデフォルト値だからです。デフォルトでは、タイムアウトはありません。

于 2013-07-13T12:27:48.077 に答える