WSARecvFrom的奇怪有关问题
WSARecvFrom的奇怪问题
下面这个接收过程,当我接收一个大小为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;
}
------解决方案--------------------
..有这有接收的吗?接收事件因该是你完成事件通知的时候在接收,这个好循环接收的吗?
下面这个接收过程,当我接收一个大小为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;
}
------解决方案--------------------
..有这有接收的吗?接收事件因该是你完成事件通知的时候在接收,这个好循环接收的吗?