joshua4
joshu****@nichi*****
2003年 6月 17日 (火) 00:15:33 JST
中島様 ふっと、思ったのですが、新しいwinのコードで、セマフォチェックにEINTが 入っていますよね。インタラプトでブロッキング命令が解除されるインタフェー スがwindowsにあるとするならば、s_read_file の実装で、readの直後のエラー チェックで、EINTをチェックし、readをリトライするようにしておいた方が無難 ですよ。 このリトライは冗長のように見えますが、OSのread(recv)の実装方法で、EINT を先にチェックしているか、それとも、データがそろっているかどうかを先に チェックしているかの違いによって、挙動が変化します。前者の場合、データが そろっていて、selectは正常終了したとしても、その直後にインタラプトがかか るとreadでEINTでエラーリターンする可能性があります。windowsがどちらの実 装になっているかをチェックするためにはかなりの実行テストをしないと解らな いので、前者の実装になっていると思ってコーディングした方が正解です。たと えば、Solarisは前者の実装になっていることを確認しています。 森 ひろひさ