WSARecv投递失败 WSAGetLastError()得到错误代码 6,调试两天了还是找不到错在哪
为什么我调试了半天老是出错。。
WSARecv老是返回错误代号为6的值。。。
如果改用阻塞recv函数 ,却能成功接收到数据。。证明参数都没问题啊,
请各位老大帮忙看看。。
谢谢了 我自己都忙活2天楽 还是解决不了。。
出错代码段如下:
————————————————————————————
struct ClientContext
{
OVERLAPPED ol;
SOCKET socket;
WSABUF wsaRecvbuf;
char recvbuf[4096] ;
WSABUF wsaSendbuf;
char sendbuf[4096] ;
DWORD dwBytes, dwFlags;
BOOL Recv_onoff;
BOOL Send_onoff;
int pendind;
};
int ret;
MessageBox(NULL,"进入Accept函数...","accept",MB_OK);
SOCKET Accept ;
SOCKADDR_IN remote;
remote.sin_family = AF_INET;
remote.sin_addr.S_un.S_addr = INADDR_ANY;
remote.sin_port = htons( 6533 );
int len = sizeof(SOCKADDR);
ret = Accept = accept(pthis->m_listensocket, (SOCKADDR *)&remote, &len );
if( INVALID_SOCKET == ret )
MessageBox(NULL,"Accept失败", "Error",MB_OK);
MessageBox(NULL,"有主机连接...","accept",MB_OK);
ClientContext *pContext = new ClientContext;
memset(pContext->recvbuf,0,sizeof(pContext->recvbuf) );
pContext->socket = Accept;
pContext->wsaRecvbuf.buf = pContext->recvbuf;
pContext->wsaRecvbuf.len = 4096;
//pContext->wsaRecvbuf.len = sizeof(pContext->recvbuf);
pContext->wsaSendbuf.buf = pContext->sendbuf;
//pContext->wsaSendbuf.len = sizeof(pContext->sendbuf);
//pContext->dwBytes = 0;
pContext->dwFlags = 0;
pContext->Recv_onoff = TRUE;
pContext->Send_onoff = FALSE;
//send(pContext->socket,"传送过去了把",256,0);//如果把这两个阻塞模式的SENG和RECV去掉解释
//char mybuf[256]={'\0'}; //改用这两个函数来发送接收消息,可以成功接收发送
//recv(pContext->socket,mybuf,256,0); //RECV却可以成功接收到发送过来的消息并且成功打印出来!!
//MessageBox(NULL,mybuf,"recv Successful",MB_OK);//打印出消息
if(CreateIoCompletionPort( (HANDLE)Accept, pthis->h_iop, (ULONG_PTR)pContext, 0) ==NULL )
MessageBox(NULL,"关联到完成端口失败","error",MB_OK);
/////////////////////////////////////上面部分全部可以成功,到了投递WSARecv就失败,郁闷。。。 老大们帮忙啊。。都2天了///////////////////
ret = WSARecv(pContext->socket, &pContext->wsaRecvbuf, 1, &pContext->dwBytes, &pContext->dwFlags, &pContext->ol, NULL );
if( SOCKET_ERROR == ret)
{
UINT error = WSAGetLastError();
if(error !=ERROR_IO_PENDING)
{
CString str;
str.Format("错误代码:%d",error ); //错误代码:6 调试的时候也是的,而且pContext->socket值为286,不是无效的啊
MessageBox(NULL,"WSARecv失败",str,MB_OK);
}
}