2016-04-18 3 views
-1

Я написал простой UDP-сервер. Ну, естественно, я использую функцию recvfrom() где-то в ней. Я искал сеть для нее и обнаружил, что это вызвано переполнением буфера. Это правда? Но я не могу понять, почему мой код не удается, и бросает ту же ошибку, вот часть, связанная с recvfrom(): ДескрипторLinux C++ recvfrom() изменяет (уничтожает) дескриптор файла [socket]

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

файла, прежде чем вызов recvfrom() является 3, но когда я его называю, оно меняется -187301886

+2

Вы уверены, что 'strlen (messageFromClient)'? Не должно быть 'sizeof (messageFromClient)' –

+0

Я использовал sizeof(), но безрезультатно –

ответ

3

Ваш код не потому, что вы указываете 0 размер приемного буфера и вы передаете дескриптора файла сокета как равный адрес аргумента (который переписывает его значение):

Fix:

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

Прошу прощения, пожалуйста, уточните больше, я не получил значение –

+0

Большое спасибо, я понял, нашел ошибку, которую я сделал –

+0

@MostafaTalebi Хорошо. –