問題タブ [poll-syscall]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5857 参照

c++ - 入力がないのに poll が返されるのはなぜですか?

と話す方法を理解するための小さなテスト プログラムを作成しましたpolltestatestb、 の3 つのファイルを作成し、最初のファイルにtestc文字列を書き込みましたhello\n。だから、ここに私の呼び出しがありますpoll

マンページによると、タイムアウトは、システムコールがタイムアウトし-1ないことを示す必要があります。しかし、何も読むことができずに戻ってきます。私は常に入力の 1 バイトを消費し、印刷されているのを見ることができますhello\nが、ポーリングはそこで止まりません。読むものがあるふりをし続けるだけです。

私が得るものはこれです:

(最後の 2 行を永久に繰り返します)

私はg++ -Wall -Wextra -std=c++11 poll.cpp -o poll3.10-2-amd64 カーネルでビルドしています。

0 投票する
3 に答える
201 参照

c - このベンチマーク コードがこれほど高い CPU を使用しているのはなぜですか?

以下のコードは機能し、正しいデータをすべて送信し、正しいデータを受信して​​います。

非常に高速なサーバーのベンチマークに使用すると、ベンチマークの CPU 使用率は ~10% です。ただし、遅いサーバーのベンチマークを行うと、ベンチマーク/ストレス テストを行っているサーバーと同じように、50% まで上昇します*。

それはtop報告しているとおりです。

なぜそんなに多くのCPUを使用するのでしょうか? poll を悪用していると思われますが、方法がわかりません。

低速サーバーの CPU 時間はベンチマークの 4 倍であり、高速サーバーの CPU 時間はベンチマークの 7 倍です。

* (今のところ、ベンチマークとサーバーの両方を同じマシンで実行しています。通信は TCP 経由です。)

0 投票する
4 に答える
23218 参照

linux - Linux ソケットの POLLERR、POLLHUP、POLLNVAL を処理するにはどうすればよいですか?

ポーリングがこれらのビットを設定したときに何をすべきか疑問に思っていますか? ソケットを閉じるか、無視しますか?

0 投票する
3 に答える
19210 参照

c - POLLHUP と POLLNVAL、または POLLHUP とは何ですか?

マンページは、poll(2) について次のように述べています。

POLLHUP - 電話を切る (出力のみ)

POLLNVAL - 無効な要求: fd が開いていません (出力のみ)

違いは正確には何ですか?ファイル記述子を閉じるとトリガーされる簡単なプログラムをPOLLNVAL作成し、閉じたfdから読み取ろうとします。ただし、を返す方法がわかりませんPOLLHUP

0 投票する
1 に答える
18948 参照

c - poll を使用して複数のクライアントを受け入れるにはどうすればよいですか? (TCP サーバー) (C)

このポーリング ビジネスは狂人によって書かれたように思えます。複数のクライアントがサーバーに接続し、入力を他のすべてのクライアントに送信できるようにする方法がわかりません。

したがって、3 つのクライアントを使用する場合は、次のようなものが必要になります。

そして、メッセージを読み書きできるようにするには、正確に何をしますか?

0 投票する
1 に答える
519 参照

c - ポーリングが POLLIN と POLLERR を返した後の Read()

ネットワーク接続管理用の aysnc スレッドプール モデルがあります。poll() を呼び出し続ける単一のディスパッチャ スレッドと、poll() がそのように示すと読み取り/書き込みを行うワーカー スレッド プール。

poll() がソケットが読み取り可能であることを示している場合を考えてみましょう。しかし、ワーカー スレッドはまだ読み取りを処理していません。ワーカー スレッドが読み取りを処理していない間、読み取りポーリングを無効にします。これで、リモート側が切断され、poll() は POLLERR/POLLHUP で戻ります。この後、ワーカー スレッドが read() を呼び出すとどうなりますか?

まだ読み取られていないデータがある場合でも、read() は <0 を返しますか? または

ソケットに POLLERR/POLLHUP があったとしても、read() はネットワークからデータを読み取りますか?

0 投票する
1 に答える
273 参照

c - ピアがハングアップした後でも、poll() は POLLIN イベントを返すことができますか?

ソケットがピアによって閉じられた後でも、poll() システム コールが POLLIN イベントを返すことがわかります。POLLIN と POLLERR の両方が設定されています。これは、read() 呼び出しが -1 を返した後でも発生し続けます。

私のロジックは、POLLIN がない場合にのみ POLLERR を処理し、ソケットが切断される前に既に到着したパケットを確実に読み取るようにします。その結果、POLLIN は常に設定されているため、POLLERR を処理することはありません。

ソケットエラーの後に poll() が POLLERR とともに POLLIN を返すのはなぜですか? そして、このシナリオをどのように処理する必要がありますか。

ありがとう!