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

时间:2016-04-18 09:32:10

标签: c++ linux sockets stack-overflow berkeley-sockets

我写了一个简单的UDP服务器。好吧,我自然会在其中的某处使用recvfrom()函数。我在网上搜索它,发现它是由缓冲区溢出引起的。这是真的?但我无法理解为什么我的代码失败并抛出同样的错误,这里是与recvfrom()相关的部分:

char messageFromClient[1024] = {0};
returnStatus = recvfrom(udpSocket, &messageFromClient, strlen(messageFromClient), 0, (struct sockaddr*)&udpSocket,
                                &addrlen);

调用recvfrom()之前的文件描述符是3,但是当我调用它时,它会更改为-187301886

1 个答案:

答案 0 :(得分:3)

您的代码失败,因为您指定了0个接收缓冲区大小,并将套接字文件描述符作为对等地址参数传递(覆盖其值):

修正:

char messageFromClient[1024];
sockaddr_in addr;
socklen_t addrlen = sizeof addr;
ssize_t received = recvfrom(udpSocket, messageFromClient, sizeof messageFromClient, 0, (sockaddr*)&addr, &addrlen);