upd通訊Recvfrom設置阻塞不起作用


把自己踩到的坑記錄一下,在做UDP通訊的時候,發現自己的程序沒有收數據居然也有百分之十二的cpu占用率,通過性能分析工具了解到時recvfrom函數一直在執行,雖然設置阻塞並且確認成功了,

int imode = 0;//阻塞

if (ioctlsocket(m_serSocket, FIONBIO, (u_long *)&imode) == SOCKET_ERROR)
{
closesocket(m_serSocket);
WSACleanup();

return 0;

}

 

調用recvfrom可以收到數據,但是在沒有數據的時候recvfrom也不阻塞,每次返回負1,然后調用getlasterror函數,得到10014,猜測大概是緩存區相關的問題,

int ret = recvfrom(m_serSocket, m_pPkgBuffer, Image_Pkg_Size * 2, 0, (sockaddr*)&remoteAddr, &nAddrLen);

檢查代碼,發現果然是第三個參數的值大於第二個buffer的大小,更改第三個參數的值為第二個參數大小之后,再測試,一切正常,在沒有數據時 recvfrom函數會阻塞了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM