把自己踩到的坑記錄一下,在做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函數會阻塞了。