关于线程中调用select的有关问题

关于线程中调用select的问题
DWORD   WINAPI   netProc(LPVOID   pParam)
    {
    int   i   =   0;
    PArmTheadParam     montp;
    montp   =   (PArmTheadParam)pParam;
    int   res;    
    char   recvBuf[100];    
    while   (!b_stopFlag)  
    {
    for(i   =   0;i   <   montp-> GunNum   ;   i++)
    {
    fd_set   fdRead;
    timeval       mWaitTime;
   
    mWaitTime.tv_sec   =   1;
    mWaitTime.tv_usec   =   0;
    memset(recvBuf,0,100);
    memset(Buf,0,250);
   
    FD_ZERO(&fdRead);
    FD_SET(montp-> s[i],&fdRead);
    res   =   select((montp-> s[i])+1,&fdRead,NULL,NULL,&mWaitTime);
    if(res   >   0)
    {
    if(FD_ISSET(montp-> s[i],&fdRead))
    {
    recv(montp-> s[i],recvBuf,22,0);
    GUNSTATE   GunState;
    memcpy(&GunState,recvBuf+17,5);
    //如果任何一个模块有异常,则返回模块异常
    if((GunState.   mGS[0].MState==   0)   ||   (GunState.mGS[1].MState   ==   0)||   (GunState.mGS[2].MState   ==   0)   ||   (GunState.mGS[3].MState   ==   0))
    {
    //     closesocket(montp-> s[i]);
    //     WSACleanup();
    COPYDATASTRUCT   cpd;   /*给COPYDATASTRUCT结构赋值*/
    cpd.dwData   =   GUN_MSTATE_ERROR;            
    cpd.cbData   =   4;
    cpd.lpData   =   (PVOID)&(montp-> beginAddr[i]);
    SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);//消息处理函数
    }
   
    if(recvBuf[10]   ==   0x01)
    {
    COPYDATASTRUCT   cpd;   /*给COPYDATASTRUCT结构赋值*/
    cpd.dwData   =   GUN_GATE_CHANGED;
    cpd.cbData   =   4;
    cpd.lpData   =   (PVOID)&(montp-> beginAddr[i]);
   
    SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);
    }  
    if(recvBuf[10]   ==   0x02)
    {
    int   j   ,k;
    for(j   =   0   ;j   <   4   ;   j++)
    {
    for(k   =   0   ;   k   <   6;k++)
    {
    // memcpy(Buf+30*j+5*k,&(montp-> beginAddr[i]),4);
    Buf[30*j+5*k]   =   (char)((montp-> beginAddr[i])   &     0xff);
    Buf[30*j+5*k+1]   =   (char)(((montp-> beginAddr[i])> > 8)&   0xff);
    Buf[30*j+5*k+2]   =   (char)(((montp-> beginAddr[i])> > 16)&   0xff);