私はCプログラミングの専門家ではありませんが、sendmsg()とrecvmsg()を使用して、クライアントとサーバー間でメッセージを送信する非常に単純なプログラムを作成しようとしています(どちらも同じマシン上にあるため、基本的にはlocalhostにメッセージを送信しています)。
(iovecやmsghdrのように)必要な構造を初期化し、クライアントをサーバーに正常に接続した後、sendmsg()呼び出しは、「使用可能なバッファースペースがありません」というerrnoで失敗します。
これは、Linuxの人がこのタイプのエラーについて報告するものです。
ネットワークインターフェイスの出力キューがいっぱいでした。これは通常、インターフェイスが送信を停止したことを示していますが、一時的な輻輳が原因である可能性があります。(通常、これはLinuxでは発生しません。デバイスキューがオーバーフローすると、パケットはサイレントにドロップされます。)
インターネットを調べた結果、sendmsg()が広く使用されておらず、このタイプのエラーに誰も関係がないことがわかりました。私が見つけた唯一の有用なアドバイスは、開いているソケットが過剰になっている可能性を確認することでしたが、ここでも、作成するすべてのソケットを常に閉じます。
だから私は立ち往生しています。基本的には、この種の問題を解決するためにどこを見ればよいのか正確にはわからないためです。
誰かが進む方法を知っているなら、それは素晴らしいことです。(そして、sendmsg()を使用しないように言わないでください。私の仕事の全体的な目的は、このシステムコールを理解することであり、自分自身にメッセージを送信することではないからです)
これまでにpastebinで書いたコードは次のとおりです:クライアントとサーバー
-解決済み--
どうもありがとうございます。私は問題を解決することができ、私が犯した他の間違いを修正したので、sendmsg()とrecvmsg()が機能するメッセージパッシングの機能コードは次のとおりです:クライアントとサーバー