良い一日をお過ごしください。
私は Berkley C Networking API をラップするクラスに取り組んでいますが、これまでのところ、TCP サーバー/クライアントしか動作していません。
皮肉なことに、私が抱えている問題はネットワーキングではなく、スタックとヒープにあります。おそらく私はそれを完全には理解していませんが、次のようなものを使用すると
ClientSocket *mysock = new ClientSocket();
、 -> 演算子を使用して関数を呼び出すだけで、完全に正常に動作します-エラーが発生した場合、私の SocketException クラスは問題なくキャッチされます。
しかし、私が使用すると:
ClientSocket mysock;
そして、を使用して関数を呼び出すときに例外がスローされます。オペレーター、それは示しています:
terminate called after throwing an instance of 'SocketException'
Aborted
そして、端末プロンプトに戻ります。
追加するのを忘れていましたが、呼び出しを try/catch ブロックでラップしています。
最初の例は「new」キーワードを使用してヒープ上の新しい ClientSocket インスタンスへのポインターを返し、2 番目の例はスタック用であることは承知していますが、問題はわかりません。
ポインター/参照/スタック/ヒープについて何かが足りないと思っていますが、何が起こっているのかわかりません。多くの場合、コードは問題なく実行されますが、例外がスローされた場合.... >:(
編集: リンク ページでは、Client.cxx と Server.cxx がサンプル ファイルです。ご指摘ありがとうございます、エリック。これを手伝っていただければ幸いです。このプロジェクトのソースは次の場所
にあります: すべてのファイルへのリンク: http://furryhead.co.cc/problem.html
(2 つ以上のリンクを貼り付けることができませんでした。また、4 つのファイルがあるため、これを行う必要があります。誰かが私の投稿にリンクをマージできます) 注意: Socket.cxx はかなり大きく、ServerSocket、ClientSocket、および SocketException の定義が含まれています。
上記のすべてのファイルをコンパイルするコマンドは次のとおりです。
g++ -c Socket.cxx -o Socket.o
g++ -c Server.cxx -o Server.o
g++ -c Client.cxx -o Client.o
g++ Server.o Socket.o -o サーバー
g++ クライアント.o ソケット.o -o クライアント
ありがとう!
Jon の推奨に従って、ソケット関数のドキュメントを調べたところ、エラー レポートが改善されました。'errno' 変数をチェックし、それに基づいて例外をスローします。(それと、ノンブロッキングに設定していません... ;) ) - 更新して感謝したかっただけです! :D