recvmmsg() が戻った後に msghdr.msg_namelen を出力しましたが、設定されていません。
ただし、msg_len は正しく設定されています。
マルチキャスト トラフィック (データグラムなど) をリッスンしています。
recvmmsg() が msghdr を生成するために必要なことはありますか?
代わりに recvmsg() を呼び出そうとしました。msghdr も入力されていません。何か案が?
recvmmsg() が戻った後に msghdr.msg_namelen を出力しましたが、設定されていません。
ただし、msg_len は正しく設定されています。
マルチキャスト トラフィック (データグラムなど) をリッスンしています。
recvmmsg() が msghdr を生成するために必要なことはありますか?
代わりに recvmsg() を呼び出そうとしました。msghdr も入力されていません。何か案が?
カーネルでは、recvmsg() と recvmmsg() の両方に、msg_namelen と msg_name を入力引数として使用する共通のサブコールがあります。つまり、これらのメンバーを自分で設定する必要があります。
そのように考えることができます。msg_name は、recvmsg() を呼び出す前にカーネルに提供する文字列領域へのポインターです。msg_namelen を設定しないと、カーネルは msg_name 領域の長さを知ることができず、メモリ アクセス エラーを発生させずに msg_name 領域にコピーできるバイト数もわかりません。