winsock编程 关于select函数为什么总返回0?
代码如下:问题在//***********后面
DWORD WINAPI SelectThread(LPVOID pParam)
{
if(pParam == NULL)
{
#ifdef _DEBUG
::MessageBox(NULL, "结束10 select thread !", "Message Box", MB_OK);
#endif
return 0;
}
//得到传递的参数
CMyTCPSocketUser * pSocket = (CMyTCPSocketUser *)pParam;
int n;
struct fd_set readfds;
int socket;
struct timeval Timeval;
CString temp;
CString temp1;
//进入无限循环,直到主线程结束
while(true)
{
::MessageBox(NULL, "4444444444455555555555!", "Message Box", MB_OK);
if(::g_bOverThread == true)
{
#ifdef _DEBUG
::MessageBox(NULL, "结束11 select thread !", "Message Box", MB_OK);
#endif
return 1;
}
DWORD word = ::WaitForSingleObject(::g_handle[1], 0);
if(word == WAIT_OBJECT_0)
{
#ifdef _DEBUG
::MessageBox(NULL, "结束12 select thread !", "Message Box", MB_OK);
#endif
return 1;
}
socket = pSocket->GetSocket();
temp1.Format("%d",socket);
::MessageBox(NULL, temp1, "Message Box", MB_OK); //***********此处显示了socket为某一正整数(如1844)
if(socket)
{
FD_ZERO(&readfds);
FD_SET(socket, &readfds);
Timeval.tv_sec = 5;
Timeval.tv_usec = 0;
n = ::select(0, &readfds, NULL, NULL, &Timeval);
temp.Format("%d",n);
::MessageBox(NULL, temp, "Message Box", MB_OK); //***************总是返回0,为什么?
if(n == SOCKET_ERROR)
{
#ifdef _DEBUG
::MessageBox(NULL, "Select 失败 !", "Messsage Box", MB_OK);
#endif
return 0;
}
if(n == 1)
{
::MessageBox(NULL, "5555555555555555!", "Message Box", MB_OK);
if(FD_ISSET(socket, &readfds))
{
#if 1
::MessageBox(NULL, "fgfdgdddddddddddddddd", "Message Box", MB_OK);
//{{可读, 发送消息 UM_READABILITY
CClientApp * pwnd = (CClientApp *)::AfxGetApp();
::SendMessage(pwnd->m_pMainWnd->m_hWnd,
UM_READABILITY,
NULL,
NULL);
//}}可读, 发送消息 UM_READABILITY
#else
//{{可读, 发送消息 UM_READABILITY
CChat_ClientApp * pwnd = (CChat_ClientApp *)::AfxGetApp();
::PostMessage(pwnd->m_pMainWnd->m_hWnd,
UM_READABILITY,
NULL,
NULL);
//}}可读, 发送消息 UM_READABILITY
#endif
}
}
}
}
}