Re: select関数でパケット受信をチェックする時のFD_ZERO,FD_SET関数
KMochidaと申します。ご回答有難うございます。
> maskの中でビットが「1」になっているものに対応するチャネルのみ
> をselectは監視しますよね。
>
> だから初期化は必要なんじゃないですか? 久野
えーと、select関数に関する
『届いているディスクリプタ(ビット目)だけ「1」にして、届いていないものは全て
「0」に書換える。』
という解釈が間違っているんですね。
(一応、アチコチの参考書を調べてはみたのですがよく理解できませんで)
久野さまのお話だと
select(soc+1,&mask,NULL,NULL,NULL);は
0番ディスクリプタ〜soc番ディスクリプタ
の内でビットが立っているものに関してだけのバケット到着の有無を調査するんです
かね。
すると、
1番ディスクリプタ〜(soc-1)番ディスクリプタ
はFD_ZERO、FD_SET関数でビットは立てられていないのでselect関数では
1番ディスクリプタ〜(soc-1)番ディスクリプタ
にパケットが届いていようがいまいが
何にもしないという解釈で宜しいんでしょうか。
としますと、前記事において
『3番ディスクリプタのみに届いている場合は
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
1000)』
は間違いで
『3番ディスクリプタのみに届いている場合は
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000』
という風に3番ディスクリプタにビットは立たないという事になるんですね。
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735