代码如下:#include "Winsock2.h"#pragma comment(lib,"Ws2_32.lib")int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
struct sockaddr_in netaddr; wVersionRequested = MAKEWORD( 2, 2 ); WSAStartup( wVersionRequested, &wsaData );
SOCKET ListenSocket  =WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
if (ListenSocket==INVALID_SOCKET ) {
return -1;
}
netaddr.sin_family=AF_INET;
netaddr.sin_port=htons(2173);
netaddr.sin_addr.S_un.S_addr =inet_addr("192.168.2.217");
if (bind(ListenSocket,(SOCKADDR *)&netaddr,sizeof(netaddr))==SOCKET_ERROR) {
return -1;
}
listen(ListenSocket,8);
struct sockaddr_in conaddr;
int    iaddrlen=sizeof(SOCKADDR_IN);
int err=0;
char clog[255];
WSABUF   wb;
wb.buf=clog;
wb.len=sizeof(clog);
WSAOVERLAPPED wof;
DWORD  nRecvBytes=0,nFlags=0;
 SOCKET h_scokaccept=WSAAccept(ListenSocket,(SOCKADDR *)&conaddr,&iaddrlen,NULL,0);
 if(WSARecv(h_scokaccept,&wb,1,&nRecvBytes,&nFlags,&wof,0)==SOCKET_ERROR )
 {
 if ((err=WSAGetLastError())!=WSA_IO_PENDING) {
 //重叠操作没有成功初始化,存在其他的错误
 printf("接受一个新的连接后未能成功的初始化一个重叠操作%d",err);
 }
 }
WSACleanup();
return 0;
}
在调试模式下,WSARecv总是返回错误,err=WSAGetLastError()返回6,既句柄无效,但是WSARecv的参数都是合法参数,而且Release模式下则不会出现这样的问题。在线等,多谢。