我写了一个简单的udp服务器。当然,我在它的某个地方使用recvfrom()
函数。我在网上搜了一下,发现是缓冲区溢出引起的。这是真的吗?但我不明白为什么我的代码会失败并抛出同样的错误,下面是与recvfrom()
相关的部分:
char messageFromClient[1024] = {0};
returnStatus = recvfrom(udpSocket, &messageFromClient, strlen(messageFromClient), 0, (struct sockaddr*)&udpSocket,
&addrlen);
调用
recvfrom()
之前的文件描述符是3
,但当我调用它时,它会变为-187301886
最佳答案
您的代码失败,因为您指定了0接收缓冲区大小,并将套接字文件描述符作为对等地址参数传递(这将覆盖其值):
修复:
char messageFromClient[1024];
sockaddr_in addr;
socklen_t addrlen = sizeof addr;
ssize_t received = recvfrom(udpSocket, messageFromClient, sizeof messageFromClient, 0, (sockaddr*)&addr, &addrlen);