WSARecv返回值为SOCKET_ERROR
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
...全文
相关推荐
windows TCP/IP 网络编程(五)5种windows网络模型(4) 重叠IO模型(a)事件通知 DEMO
windows TCP/IP 网络编程(五)5种windows网络模型(4) 重叠IO模型(a)事件通知 DEMO
WSARecv()函数
WSARecv()是从一个套接口接收数据的程序。主要用于在重叠模型中接收数据。 #include <winsock2.h> int WSAAPI WSARecv ( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPINT lpFlags, LPWSAOVERLAPPED l
Socket Send and Receive
收发数据是网络编程的主题,在套接字上收发数据我们可以使用send和recv,当然还有Winsock2的WSASend和WSARecv。我们这里只讨论send和recv。
易语言源码易语言IOCP服务交互源码
易语言源码易语言IOCP服务交互源码
完成端口 服务器+客户端
近期编写的完成端口服务器和客户端,供2个程序,用了一些设计模式,分别是观察者和装饰模式.现在有一个问题,就是当关闭客户端时,服务器收不到任何断开通知,想放上来希望高手指点.


