あと、recvmsg()でMSG_ERRQUEUEを使うとエラー情報が取れると
マニュアルにあるので、やろうとしましたが、全然できません。

それに、疑問点が多々あります。
○IP_RECVERRの指定はsetsockopt()でするのでいいですか。
○msghdrにエラーがセットされるとありますが、
 エラーはsock_extended_errで提供されるともあります。
 msghdrのメンバにsock_extended_errなんてありません。
 msghdrに具体的にどのようにエラーがセットされるんでしょうか。
○recvmsg()でエラー情報を吸い上げるサンプルコードの載っている
 サイトをご存知の方は教えてください。

よろしくお願いします。