0

同じプロセス (異なるスレッド) 内で Boost::asio と accept() (両方の TCP ソケット) などのネイティブ呼び出しを使用する際に既知の問題はありますか? 私は Debian を使用しており、C++ 言語を使用しています。私の観察では、accept() の動作に一貫性がありません。

プロセスを実行する特定のインスタンスで、クライアントはスムーズに接続できます。クライアント数に関係なくスムーズに接続できます。

プロセスを実行する別のインスタンスでは、クライアントが接続したときに「引数が無効です」と言って、accept 呼び出しが失敗します。このようなエラーは、ソケットがリッスン ソケットとして適切に構成されていない場合に発生するはずです。このエラーが発生すると、接続しようとしているすべてのクライアントで同じエラーが発生します。唯一の回避策は、プロセスを再度実行し、次回は正常に機能することを期待することです。

その他の観察:- - 一部のファイルに対してさらにいくつかの記述子が開かれると、問題が解消される傾向があります - boost::asio コードを削除すると、accept は完全に正常に動作します

制限事項: コードを共有できません

4

2 に答える 2

0

私は2つの異なるスレッドを生成しました。その後は問題ありません。

于 2012-12-27T09:16:06.967 に答える
0

などのシステムコールでBoost.Asioを使用しても問題はありませんaccept()。いくつかのプロジェクトで問題なく実行しました。あなたの説明に基づいて、私には未定義の動作のように聞こえます。close()記述子をリークしている、記述子を二重にしている、または必要に応じてリターンコードをチェックしていないと思います。コードを投稿できない場合は、valgrind などのツールを使用してデバッグ作業を支援してください。

于 2012-10-28T20:10:28.210 に答える