【发布时间】:2021-01-12 16:27:40
【问题描述】:
我正在尝试处理一些 UDP 包。打开套接字等效果很好,我得到了包,我得到了源 IP 和端口。端口设置在 m_port 中,IP 设置在 m_ipfilter 中。但是 recvfrom 总是返回 1。我的代码基本上是示例代码,根据 wireshark 有长度为 998 的包传入。有人知道我做错了什么吗?缓冲区目前为 2k 长。
struct sockaddr_in server, from;
int sock, flen = sizeof(from);
char buf[BUFLEN];
if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
std::cerr << "Couldn't open socket: " << strerror(errno) << ", errno: " << errno << std::endl;
return;
}
memset((char *)&server, 0, sizeof(server)); //zero the structure
server.sin_family = AF_INET;
server.sin_port = htons(m_port);
server.sin_addr.s_addr = htonl(m_ipfilter); //zero is recive on any adrress, INADDR_ANY=0
if (bind(sock, (struct sockaddr *)&server, sizeof(server)) == -1)
{
std::cerr << "Couldn't bind socket on port: " << m_port << " : " << strerror(errno) << ", errno: " << errno << std::endl;
return;
}
while (1)
{
ssize_t recv_len = 0;
if (recv_len = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&from, (socklen_t *)&flen) != -1) //there is data
{
processOutput(buf, recv_len, from, (socklen_t)flen);
}
}
【问题讨论】: