誰かがよう)(selectを使用して私にいくつかのコードを示したときに、私は完全にそれを失った。だから、基本的にはソケットファイルを挿入し、バインドした後何FD_ZERO
といくつかの理由のための明確な以前の内容で聞くと言ってソケットファイル記述
FD_ZERO(&readfds);
FD_SET(socket,&readfds);
FD_SET(0,&readfds);
.......// bind() and listen(),regular stuff
// Before select(),this guy cleared readfds to null and sort of start all over again
FD_ZERO(&readfds);// Behold,this is exactly the line confusing myself
FD_SET(socket,&readfds);
// select will be called in the future within a infinite loop
fdを設定すると、0の記述子(標準入力)が見えなくなりました。
誰もがこの全部を説明できますか?私はこれが正しいように感じることはありませんが、私は本当にそれを把握できません。たぶん、いくつかの特定をすべてやり直す設定fdを設定することは現実的なメカニズムである...
私はbind()
とlisten()
がmanner.Iのいくつかの並べ替えでは、FDのセットポイントを壊すのカップルを設定変更し、outputs.Consequentlyを調べることができると思いましたfdセットはまったく変更されませんでした。
UPDATE:
本当に私を混乱させるが第2 FD_ZERO(&readfds)
です。 明らかに、最初のものは、バッファーの錆びたものを取り除くようなものです。各反復で、将来のためにfdsetをデフォルトにクリアする必要があります。私はちょうど2番目を理解していない。それは間違ったものであるか、どんな速度でも傷つけません。
'select'はfdsetを変更しますが、' bind'と 'listen'はできません。ポインタも与えられません。しかし、自分自身に好意を持ち、 'poll'や' epoll'のような現代的なAPIを使い、fdsetについてもう一度心配しないでください。 –
はクールだが、私はちょうどそれを得ることはできない – jasonkim
'poll'を使う。モダンでポータブルで高速です。 'epoll'はベンチマーク自己喜びのためだけであり、それが優れているベンチマークは実際の使用ニーズ(' epoll'が実際に 'poll'よりはるかに遅い)に対応していません。 –