ファイル記述子不良の解決方法
ソケットを生成した後、プロセスディスクリプタのインデックス番号に対応する整数値を返します。
ファイルディスクリプタの数には限りがあり、何度もソケットを作成すると当然ながら消費してしまい、openに失敗してしまいます。
オープンするときに作るハンドルのようなDD(あなたの場合はfd=socket()ですね)、それを解放したり閉じたりしないと、OSがサポートする最大値に達するともうオープンできなくなるのだそうです。Solarisではulimitで最大値を変更することができます。
サーバーは select() モデルを使用して、読み取り可能なソケットと書き込み可能なソケットを、それぞれ共有メモリの読み取りソケットキューと書き込みソケットキューに入れます。読み取り可能なソケットと書き込み可能なソケットは、それぞれ読み取りソケットと書き込みソケットを処理する2つの子プロセスによって、共有メモリから読み取られます。
問題:クライアントがサーバーに接続し、サーバーにデータを送信する。メインサーバプロセスは、読み取り可能なソケットを共有メモリ内の読み取りソケットキューに入れ、子プロセスは共有メモリからソケットを読み取り、そのソケットでrecv()を呼び出してデータを読み取ります。プログラムはエラーを返し、エラーコードから不良ファイル記述子であることがわかる。
また、FD_ISSET()にお願いしたいのは、その
select(maxFd + 1, &readSet, &writeSet, NULL, NULL);
接続されたソケットconnectfdは、クライアントからデータを送信していないのに、なぜFD_ISSET(connectfd, &readSet) は常にソケットが読み取り可能であると返すのですか?
子プロセスが生成された後、親プロセスが開いた新しいソケットは、子プロセスが直接利用できなくなるはずです。
親プロセスのコネクションでデータを検出し、子プロセスがrecv?
これはうまくいかないと思うんですよね。各プロセスにはバッファがあり、selectで検出されたデータは子プロセスのバッファにはないので、子プロセスで読み込むことはできません。親プロセスで読んで、子プロセスの共有メモリに書き込めばいいんです。
関連
-
発生: collect2 の原因の 1 つ: error: ld returned 1 exit status
-
RuntimeWarning: double_scalars で無効な値が検出されましたが、正常に解決されました。
-
ImportError の解決に成功しました。必要な依存関係 ['numpy'] がありません。
-
統合マネージドパイプラインモードで適用されないASP.NETの設定が検出されました。
-
ダブルフリーまたはコラプション(Fasttop)生成
-
左オペランドはl値でなければならない(左オペランドは代入可能な変数でなければならない)。
-
JavaScriptで不正なappendChildを解決する方法
-
ValueErrorの解決策:解凍する値が足りない(期待値2、取得値1)。
-
ahkスクリプトガイド
-
Application_Webservice の Global.asax ファイルの開始をトリガーすることはできません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決策:matlab スレッド "AWT-EventQueue-0" で例外発生 java.lang.OutOfMemoryError: Javaヒープ
-
Reactネイティブの開発で遭遇するいくつかのポットホール
-
jupyter notebookは、モジュール 'matplotlib' に属性 'subplots' がないことをエラーとして報告します。
-
sourceTree solution マージする前に、変更をコミットするか、隠しておいてください。
-
解決方法:コマンドが見つかりません。
-
Rollup.js|solve the package react project error ReferenceError: process is not defined.
-
予期しないトークン付近の構文エラー 脚注のエラー解決
-
std::invalid_argument' what() のインスタンスを投げた後に呼び出された処理を終了させる: stoi
-
java.security.cert.CertPathValidatorException を解決してください。認証パスのトラストアンカーが見つかりませんでした。
-
json文字列のダブルクォートが&quotになるのですが、どうすれば解決できますか?