为什么我调试了半天老是出错。。
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);
}
}