gpt4 book ai didi

linux - 为什么recvfrom()会报告数据包大小?

转载 作者:太空宇宙 更新时间:2023-11-04 04:29:13 24 4
gpt4 key购买 nike

我正在开发一个 Linux 服务器,它监听 UDP 消息作为发现协议(protocol)的一部分。我的监听代码如下:

           rcd = ::select(
socket_handle + 1,
&wait_list,
0, // no write
0, // no error
&timeout);
if(rcd > 0)
{
if(FD_ISSET(socket_handle,&wait_list))
{
struct sockaddr address;
socklen_t address_size = sizeof(address);
len = ::recvfrom(
socket_handle,
rx_buff,
max_datagram_size,
0, // no flags
&address,
&address_size);
if(len > 0 && address.sa_family == AF_INET)
{
struct sockaddr_in *address_in =
reinterpret_cast<struct sockaddr_in *>(&address);
event_datagram_received::cpost(
this,
rx_buff,
rcd,
ntohl(address_in->sin_addr.s_addr),
ntohs(address_in->sin_port));
}
}
}

同时,我编写了一个传输UDP消息的Windows客户端。我已经使用wireshark验证了消息正在以正确的格式和长度(五个字节)传输。但是,当我检查 recvfrom() 的返回值时,该值始终为 1。我的接收缓冲区的大小 (max_datagram_size) 设置为 1024。我们获得的数据包的一个字节似乎具有正确的值。我的问题是:为什么我没有获得所有预期的字节?

如果重要的话,我的 Linux 服务器在 VirtualBox 虚拟机中的 Debian 5 下运行。

最佳答案

nos 在第一条评论中回答了我的问题。我使用了错误的变量来报告缓冲区长度。

关于linux - 为什么recvfrom()会报告数据包大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com