在MFC程序线程中施用默认的accept()却无法阻塞,网上找到的方法不能解决,代码如下

在MFC程序线程中使用默认的accept()却无法阻塞,网上找到的方法不能解决,代码如下:
unsigned int WINAPI CTCPServerSocket::Thread_Accept_Func(void *vargp)
{
CTCPServerSocket *obj=(CTCPServerSocket *)vargp;
//初始化套接字缓冲区
obj->sbuf.num=0;
obj->sbuf.first=0;
obj->sbuf.last=-1;
//创建侦查线程
unsigned int thread_detect;
_beginthreadex(NULL, 0, Thread_Detect_Func,(void *)obj, 0, &thread_detect);
while(1)
{
sockaddr_in *servAddr= new sockaddr_in;
SOCKET *clntSock= new SOCKET;
int addrlen = sizeof(servAddr);
//*clntSock=obj->AcceptTcpConnection();
::MessageBox(NULL,"000000000000000000000000000","system error",MB_OK|MB_ICONERROR);
*clntSock=accept(obj->ListenSock, (struct sockaddr *)servAddr, 0);
::MessageBox(NULL,"11111111111111111111111111111","system error",MB_OK|MB_ICONERROR);
if((*clntSock)==NULL)
{
delete servAddr;
delete clntSock;
::MessageBox(NULL,"链接客户端失败","system error",MB_OK|MB_ICONERROR);
}
else
//obj->sbuf_insert(clntSock, servAddr);
{
if(obj->sbuf.num<MAX_CLIENTS)
{
if(obj->sbuf.last>=(MAX_CLIENTS-1))
obj->sbuf.last=0;
else
obj->sbuf.last++;
obj->sbuf.buf[obj->sbuf.last]=clntSock;
obj->sbuf.servAddr[obj->sbuf.last]=servAddr;
obj->sbuf.num++;//必须放在最后
}
}
}
return 1;
}
线程 mfc socket thread

------解决方案--------------------

//int addrlen = sizeof(servAddr);
//*clntSock=accept(obj->ListenSock, (struct sockaddr *)servAddr, 0);
//上面的两句话改为
socklen_t addrlen = sizeof(servAddr);
*clntSock=accept(obj->ListenSock, (struct sockaddr *)servAddr, &addrlen);


------解决方案--------------------
先看看有套节字有没有效了,再用WSAGetLastError看看错误提示是什么
------解决方案--------------------
accept
The Windows Sockets accept function accepts an incoming connection attempt on a socket.