質問編集履歴
2
追記の変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,4 +3,9 @@
|
|
3
3
|
|
4
4
|
ここで疑問に思ったのが、このような状況になった時はrecvでデータを受け取ろうとしても何も得られないのは予想できますが、得られるはずだったデータを得るためにはどのようにすればよいのかです。単純にもう一度selectからやり直してデータを正しく受け取るのを待つだけでよいのでしょうか?
|
5
5
|
|
6
|
+
(追記)
|
7
|
+
いくつか不備があったので追記します。
|
8
|
+
- プロトコルはTCPです。
|
6
|
-
|
9
|
+
- 勉強のためにselectなどを直接使い、ライブラリは使用しません。
|
10
|
+
- 使用言語はCです。
|
11
|
+
- 上の質問はO_NONBLOCKを使用したときを想定しています。
|
1
追記の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
[selectのmanページ](https://linuxjm.osdn.jp/html/LDP_man-pages/man2/select.2.html)のバグの項目において以下のような記述があります。
|
2
2
|
> Linux では、 select() がソケットファイルディスクリプターで "読み込みの準備ができた" と報告した場合でも、 この後で read を行うと停止 (block) することがある。このような状況は、 例えば、データが到着したが、検査でチェックサム異常が見つかり廃棄された時 などに起こりえる。他にもファイルディスクリプターが準備できたと間違って 報告される状況が起こるかもしれない。 したがって、停止すべきではないソケットに対しては O_NONBLOCK を使うとより安全であろう。
|
3
3
|
|
4
|
-
ここで疑問に思ったのが、このような状況になった時はrecvでデータを受け取ろうとしても何も得られないのは予想できますが、得られるはずだったデータを得るためにはどのようにすればよいのかです。単純にもう一度selectからやり直してデータを正しく受け取るのを待つだけでよいのでしょうか?
|
4
|
+
ここで疑問に思ったのが、このような状況になった時はrecvでデータを受け取ろうとしても何も得られないのは予想できますが、得られるはずだったデータを得るためにはどのようにすればよいのかです。単純にもう一度selectからやり直してデータを正しく受け取るのを待つだけでよいのでしょうか?
|
5
|
+
|
6
|
+
(追記)プロトコルはTCPです。勉強のためにselectなどを直接使い、ライブラリは使用していません。
|