2016-04-18 109 views
-1

我寫了一個簡單的UDP服務器。那麼,我自然會在其中某處使用recvfrom()函數。我已經在網上搜索了它,發現它是由緩衝區溢出引起的。這是真的?但我不明白爲什麼我的代碼失敗並引發同樣的錯誤,這裏是recvfrom()相關的部分:Linux C++ recvfrom()更改(銷燬)[套接字]文件描述符

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接收緩衝區的大小和你通過套接字文件描述符爲對端地址參數(這將覆蓋其值):

修復:

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那麼很好。 –

相關問題