select()函数 10038错误。
初始化:
SOCKADDR_IN addrListen,client;
SOCKET sListen, ssocket;
int nRes;
int iAddrSize = sizeof(SOCKADDR_IN);
sListen = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sListen == INVALID_SOCKET)
{
WSACleanup();
return false;
}
addrListen.sin_family = AF_INET;
addrListen.sin_addr.S_un.S_addr = INADDR_ANY;
addrListen.sin_port = htons( LISTEN_PORT );
nRes = bind(sListen,(sockaddr *) & addrListen,sizeof(SOCKADDR_IN));
if( nRes == SOCKET_ERROR )
{
closesocket( sListen );
WSACleanup();
return false;
}
nRes = listen( sListen, 3 );
if( nRes == SOCKET_ERROR )
{
closesocket( sListen );
WSACleanup();
return false;
}
HANDLE h;
UINT nThreadID;
h = (HANDLE)_beginthreadex(NULL,0,WorkThread, (void*) this,0, &nThreadID);
if (h==NULL)
{
closesocket( sListen );
WSACleanup();
return false;
}
while (true)
{
ssocket = accept(sListen,(sockaddr *) & client,&iAddrSize);
PrintRsult(inet_ntoa(client.sin_addr));
g_CliSocketArr[g_iTotalConn++] = ssocket;
}
return false;
线程函数
SelectServer* pThis = reinterpret_cast<SelectServer*>(lParam);
int i ;
fd_set fdread;
int ret = 0;
struct timeval tv = {1, 0};
while(true)
{
FD_ZERO(&fdread);
for(i=0 ; i<g_iTotalConn;i++)
{
FD_SET(g_CliSocketArr[g_iTotalConn],&fdread);
}
ret = select(0,&fdread,NULL,NULL,&tv);
if(ret==SOCKET_ERROR)
{
printf("%d",GetLastError());
Sleep(1000);
}
else if(ret==0)
continue;
for(i = 0; i<g_iTotalConn;i++)
{
}
ret = select(0,&fdread,NULL,NULL,&tv);
if(ret==SOCKET_ERROR)
{
printf("%d",GetLastError());
Sleep(1000);
}
else if(ret==0)
continue;
问题就在这里 GetLastError 10038
why?????