把自己踩到的坑记录一下,在做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函数会阻塞了。

相关文章:

  • 2021-11-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
  • 2021-11-09
  • 2021-04-27
  • 2021-06-17
猜你喜欢
  • 2022-01-03
  • 2022-01-03
  • 2022-02-05
  • 2021-05-27
  • 2022-12-23
  • 2021-11-13
相关资源
相似解决方案