【发布时间】:2012-08-09 10:23:59
【问题描述】:
这里的任何人都可以告诉我如何发送大于提供给 UDP 套接字的系统缓冲区的数据报,以便在 C 中测试 MSG_TRANC
以及如何获取套接字缓冲区的大小?
【问题讨论】:
-
您不能发送大于套接字缓冲区的 UDP 数据包。 (内核没有空间,send() 会因 EMSGSIZE 出错)您无法接收大于套接字缓冲区的数据报。 (内核没有空间容纳它,并且会丢弃数据包)。
-
但是有一个标志告诉你消息被截断了
-
是的。也就是说,如果您尝试将数据包读入应用程序中的 your 缓冲区,但 your 缓冲区不够大。例如有人给你发了一个 1000 字节的数据包,你给 recvmsg() 一个大小为 500 的缓冲区,将设置 MSG_TRUNC 标志,前 500 个字节被复制到你的缓冲区,其他 500 个字节被丢弃。这里有很多层在起作用。网卡 -> 驱动环缓冲区 -> 内核套接字缓冲区 -> 你的应用程序