Linux c++ recvfrom() 更改(破坏)[socket] 文件描述符

Linux c++ recvfrom() changes (destroys) the [socket] file descriptor

我写了一个简单的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);