WSARecvFrom的奇怪问题

zhyaaa123 2007-06-14 11:28:14
下面这个接收过程,当我接收一个大小为MAX_PACKET_SIZE的包时,接收一次,再接收就失败了,但是如果我把MAX_PACKET_SIZE加1或减1就能够连续接收(减有些数字还是不能,MAX_PACKET_SIZE=1024),是什么原因?

DWORD WINAPI CP2PClient::RecvThreadProc(LPVOID lpParam)
{
CP2PClient *pThis = (CP2PClient *)lpParam;
char buff[MAX_PACKET_SIZE];
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
WSABUF wsaBuf;
wsaBuf.buf = buff;
wsaBuf.len = MAX_PACKET_SIZE;

while(TRUE)
{
DWORD dwRecv, dwFlags = 0;
int nRet = ::WSARecvFrom(pThis->m_s, &wsaBuf,
1, &dwRecv, &dwFlags, (sockaddr*)&remoteAddr, &nAddrLen, &pThis->m_ol, NULL);
if(nRet == SOCKET_ERROR && ::WSAGetLastError() == WSA_IO_PENDING)
{
::WSAGetOverlappedResult(pThis->m_s, &pThis->m_ol, &dwRecv, TRUE, &dwFlags);
}

if(pThis->m_bThreadExit)
break;
pThis->HandleIO(buff, dwRecv, (sockaddr *)&remoteAddr, nAddrLen);
}
return 0;
}
...全文
188 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyaaa123 2007-06-14
  • 打赏
  • 举报
回复
发现如果MAX_PACKET_SIZE是8的倍数的时候就会失败,如果不是就没有问题
toxyboy 2007-06-14
  • 打赏
  • 举报
回复
..有这有接收的吗?接收事件因该是你完成事件通知的时候在接收,这个好循环接收的吗?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧