我正在尝试使用内核2.6.18在Linux上使用sendmsg()发送一个带有TOS值的UDP数据包。但是电话失败并出现错误' Invalid Argument'。 如果我禁用辅助数据部分(请参阅条件编译标志USE_IP_TOS),则sendmsg()成功。以下是代码和输出:
\2
请注意我已尝试启用/禁用代码的setsockopt()部分以进行测试。但这没有帮助
我不知道自己做错了什么。非常感谢任何帮助找到问题的代码或一些指针,以进一步调试问题。
由于 Raveendra
答案 0 :(得分:-1)
我在我的Centos [kernel = 3.10.0] => Windows测试发送中尝试了你的代码,略有改变(2个更改:其他IP和宏USE_IP_TOS定义) - 它可以工作。我在Wireshark UPD包中看到DSCP字段设置为'加速转发'。
您的代码有效。
虽然,您不能将无符号变量[size_t sendBytes]用于已签名的sys-call返回值。 memset-s也没用。 也许你的问题是由安全原因引起的(但是奇怪的错误)。 或者你的内核太旧了;或支持此功能是从内核编译而来的。 系统可能会使用EINVAL对不良ToS(例如= 2)抱怨。