在c ++中查看UDP消息

Ido*_*dov 6 c++ windows udp peek


我正在尝试使用c ++中的套接字接收UDP消息.
我在标题中发送消息的大小,所以我可以知道应分配多少内存,所以我试着看一下这样的消息的开头:

int bytesRead = recvfrom(m_socketId, (char*)&header, Message::HeaderSize, MSG_PEEK, (struct sockaddr *)&fromAddr, &addrSize);  
Run Code Online (Sandbox Code Playgroud)

但我一直收到系统错误10040:

"在数据报套接字上发送的消息大于内部消息缓冲区或某些其他网络限制,或者用于接收数据报的缓冲区小于数据报本身."

有没有办法偷看信息的乞讨?
谢谢 :)

sar*_*old 6

鉴于UDP数据包的最大尺寸65507,你可以只分配一个64K的"反弹缓冲区"您的所有recvfrom()来电-一旦你在复制它,读的大小,分配一个新的缓冲区,使副本您的数据包大小合适.

一个有点浪费被周围这么多拷贝的分组数据,但它会让你在正确的大小分配缓冲区.

或者,如果您知道由于应用程序的体系结构,您的对等方将永远不会生成大于8k的数据包,您可以只分配8k缓冲区并浪费空间.意识到内存使用很重要,但有时只是刻录额外的页面会导致更简单的代码.