发送带有IP_TOS辅助数据的UDP数据包时,sendmsg()因无效参数而失败

时间:2017-03-06 15:17:41

标签: sockets sendmessage invalid-argument

我正在尝试使用内核2.6.18在Linux上使用sendmsg()发送一个带有TOS值的UDP数据包。但是电话失败并出现错误' Invalid Argument'。 如果我禁用辅助数据部分(请参阅条件编译标志USE_IP_TOS),则sendmsg()成功。以下是代码和输出:

\2

请注意我已尝试启用/禁用代码的setsockopt()部分以进行测试。但这没有帮助

我不知道自己做错了什么。非常感谢任何帮助找到问题的代码或一些指针,以进一步调试问题。

由于 Raveendra

1 个答案:

答案 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)抱怨。