|
>>1591 68user レスどもです。 ret = select( 64, &work_fdset, NULL, NULL, &time_out ); と指定していたので、ファイルディスクリプタ 0〜64までをチェックしかselectはチェックしていなかったので selectはタイムアウトを返し、実際取得したファイルディスクリプタは 64を超えた数になっていたのでFD_ISSETは反応を返した。 というふうになっていた模様です。 ちなみに、ファイルディスクリプタの番号を ここからここまでの番号しか取得しない。とか制限かける方法とか ないのでしょうか? |
|
レス遅くなってごめんなさい。 >>1525 68user >2. 相手側がコネクションを切断したときも select は 1 を返します。 > その際、recv すると1バイトも読めず、0を返しているはずなのに コネクションが切断したときのselectの返り値、recvの返り値については このレスを見て初めて知りました。ありがとうございます。 >>1526 68user >ついでに言っておくと、状況にもよりますが、select に ><> や read を使うのは不適切です。select で読み込み このサイトで紹介されているECHOサーバのように、「クライアントやサーバーとうま く接続できたかどうかを確認する」、というような形が正しいselectの使われ方だと 考えてもいいですか? alarmを使う事でブロッキングを強引に回避するという方法がありますが、他に 比較的OSに依存しない形でブロックを避ける手段はないでしょうか? |