我在一个工作者线程中收取UDP数据,却收不到,为什么呢?
while (TRUE)
{
DWORD dwWaitResult = WaitForSingleObject(m_hEventKillThread, 5);
if (dwWaitResult == WAIT_OBJECT_0)
break;
{
static WSABUF stWSABuf;
stWSABuf.buf = (char *)m_lpMPEGRecvWritePtr;
stWSABuf.len = 32768;
static WSAOVERLAPPED o;
o.hEvent = WSACreateEvent();
static DWORD dwRet = 0;
static int iLen = sizeof(m_stSrcAddr);
static DWORD dwFlag = 0;
int nRet = WSARecvFrom(m_hSocket, &stWSABuf, 1, &dwRet, &dwFlag,
(struct sockaddr *)&m_stSrcAddr, &iLen, &o, NULL);
if (nRet != SOCKET_ERROR)
m_lpMPEGRecvWritePtr += dwRet;
else if (WSAGetLastError() == WSA_IO_PENDING)
{
HANDLE hEvent[1] = {o.hEvent};
if (WSAWaitForMultipleEvents(1, hEvent, FALSE, 7, FALSE) == WSA_WAIT_EVENT_0)
{
m_lpMPEGRecvWritePtr += stWSABuf.len;
dwRet = stWSABuf.len;
}
}
if (dwRet > 32768)
SetEvent(m_hEventAdjust);
if (dwRet > 0)
{
m_strInfo.Format("受到数据%d, 读指针%u, 写指针%u", dwRet, m_lpMPEGRecvReadPtr, m_lpMPEGRecvWritePtr);
PostMessage(WM_NS2000DUMPINFO);
}
WSACloseEvent(o.hEvent);