問題タブ [select-function]
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.
c - raw ソケットでの ping パケット
veth インターフェイスで ping パケットを受信しようとしています。しかし、受信側には何も見えません。TCP ダンプを実行すると、パケットが表示されます。これが私のコードです。
そこで、ve12p で ping を実行します。select を通過することはなく、 print ステートメントに到達します。
veth インターフェイスを確認しました。それらはアップしており、ve12 の tcpdump でパケットを確認できます。
c - Cでselect()呼び出し後に準備ができているファイル記述子を知る
私はソケットプログラミングが初めてで、select()
システムコールを紹介されました。私の質問は、C でサーバーを作成していて (これを行おうとしています)、select()
実際に実装で呼び出しを使用したいとします。クライアントから情報を受信するサーバーを作成しようとしているので、私のアプローチは を使用しselect()
、続いread()
て情報を出力することです。
私が読んだドキュメントによると、入出力の準備ができている入力セット内のファイル記述子の数select()
を返します。私の質問は、元のセットのどのファイル記述子が I/O の準備ができているかをどのように知ることができるかということです。過去に見た検索や例では、これを見つけることができないようです。
私のコードが以下のようになっているとしましょう:
c - C - TCP ソケットの送信バッファを満たす
送信バッファがいっぱいになったときに書き込みが失敗するかブロックされるかを証明するために、実験的なクライアント/サーバー プログラムを作成しようとしています。基本的に、送信側プログラムに無限ループがあり、 select() を使用してバッファーに書き込めるかどうかを確認します (これは、ソケットバッファーがいっぱいではないことを意味します)。文字を write() します。FD_ISSET(sockfd, &writefds) が false の場合、ループが中断されます (バッファーがいっぱいであるため、バッファーに書き込むことができません)。受信側プログラムは、read() を開始する前に 1 分間スリープします。このスリープ時間内に送信者がバッファをいっぱいにすることを期待していますが、実際には、プログラムは決して終了しません。
差出人:
レシーバー:
c - 理由もなく選択から抜け出す
私はこのようなことをしています
私のコードは、理由もなく選択から抜け出します。パケットを受信しません。10回の実行で、選択を待機する場所で1回実行されます。休むだけで終了します。
ソケットは ICMP パケットを受信するように設定されています。その1回の実行で、完全に機能します。なぜこれが9回失敗するのですか?
c - C - ソケットをサイクルする方法
送信したファイルの内容を印刷するプログラムがあります。
しかし、私はこのプログラムが私が印刷したい他のものを聞くことを望んでいます。そのため、ソケットを循環させ、ソケットをリッスンする必要があります。関数が必要であることは理解select()
していますが、自分のコードでそれを使用する方法がわかりません。
c - select( ) は一度だけ正の値を返します
一部のパケットが期待どおりに UDP ポートに到達すると、select 関数は +ve 値を返します。しかし、これは一度だけ起こります。UDP ポートでパケットを受信した 2 回目以降、関数は応答しません。しかし、UDP パケットを受信した後、同じソケットで sendto() を実行すると、select 関数が応答します。この行動の理由は何でしょうか?
コード: