Моя неблокирующая функция UDP-соединения select () всегда возвращает 0 - PullRequest
0 голосов
/ 20 января 2019

Я хочу использовать UDP, чтобы отправить сообщение в визуальный блок, среда которого vxworks, я проверяю, что мой клиентский код работает хорошо, компьютер и визуальный блок могут пропинговать друг друга. Но функция select () всегда возвращает 0 в моем приемнике, Я должен выключить свой брандмауэр

вот мой код:

/* Create socket */  
if ((sFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR)  
{  
    perror ("socket");  
    close (sFd);  
    return (ERROR);  
}  

/* Build socket address */  
bzero ((struct sockaddr_in *) &myAddr, sockAddrSize);  
myAddr.sin_family = AF_INET;  
myAddr.sin_port = htons (8882);                         //vxport
myAddr.sin_addr.s_addr = htonl(INADDR_ANY);             //local ip

bzero ((struct sockaddr_in *) &remoteAddr, sockAddrSize);  
remoteAddr.sin_family = AF_INET;  
remoteAddr.sin_port = htons (8881);                     //vs port 
remoteAddr.sin_addr.s_addr = inet_addr ("192.168.73.1");    //vs IP

/* Bind socket to local address */  
if (bind (sFd, (struct sockaddr *) &myAddr, sockAddrSize) == ERROR)
{  
    perror ("bind");  
    close (sFd);  
    return (ERROR);  
}  

memset(recvBuff,0,sizeof(recvBuff));        //clear the receiver buffer

while(1)  
{  
    FD_ZERO(&rfd);
    FD_SET(sFd,&rfd);       
    printf("sFd = %d\n",sFd);
    rc = select(sFd + 1,&rfd,NULL,NULL,&wait);
    if(rc == 0){
        printf("time out\n");
        //          return -1;
    }
    else if(rc <0/*== ERROR*/){
        perror("select()");
        break;
    }
    else if(FD_ISSET(sFd,&rfd)){
        if ((nbytes = recvfrom (sFd, recvBuff, sizeof (recvBuff), 0,  
                (struct sockaddr *) &remoteAddr,&sockAddrSize)) < 0)  
        {  
            perror ("recvfrom");  
            close (sFd);  
            return (ERROR);  
        }  
        else{
            recvBuff[nbytes] = "\0";
            printf("is recieved the message\n");

        }
    }
}  
close (sFd);  }

Кто-нибудь может найти, в чем проблема?Большое спасибо ..

...