WSARecv返回值为SOCKET_ERROR

shanghaixiaoyu shanghaixiaoyu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
bool CXXXX::RecvData(void)
{
DWORD dwBytesRecved; //接收字节数
DWORD dwFlags = 0; //接收标志

ZeroMemory(&m_iReadIO, sizeof(WSAOVERLAPPED)); //重叠结构置0
m_iReadIO.hEvent = WSAEVENT(this);


char recvBuf[MAX_BUF_SIZE];
ZeroMemory(recvBuf, MAX_BUF_SIZE);
wsaRecvBuf.len = MAX_BUF_SIZE;
// wsaRecvBuf.__byte_writableTo(MAX_BUF_SIZE) = recvBuf;
wsaRecvBuf.buf = recvBuf;

//异步接收数据
if (SOCKET_ERROR == WSARecv(m_sockAccpet, &wsaRecvBuf, 1, &dwBytesRecved, &dwFlags, &m_iReadIO, IReadRoutine))
{
if (WSAGetLastError() != ERROR_IO_PENDING)
{
return false;
}
}
return true;
}


在线程中执行,其中
m_sockAccpet 为Accept Socket
WSAOVERLAPPED m_iReadIO; //读完成例程
WSABUF wsaRecvBuf;
IReadRoutine为回调函数

没有接收到数据时,WSARecv返回值为SOCKET_ERROR ,当有数据到来时,程序直接执行到回调函数(系统调用),请问哪里错了导致WSARecv返回值为SOCKET_ERROR
...全文
评论 10
收藏 已收藏
分享
返回顶部
shanghaixiaoyu
VC/MFC 16,550 成员 421,606 内容