Ошибка сбоя сегментации с rpcgen - PullRequest
0 голосов
/ 20 октября 2019

Я столкнулся с проблемой "Ошибка сегментации" с rpcgen. Всякий раз, когда я запускаю код, из-за функции isinteger () сервер останавливается. Может кто-нибудь, пожалуйста, посмотрите на это и помогите, что с ним не так?

Ошибка - "вызов не выполнен: RPC: невозможно получить; errno = Соединение отклонено Ошибка сегментации"

code_server.c

    int isinteger(char *input){  
        int isInt=0;//we use int as a boolean value;
        short int isFloat=0;
        short int isUndifined=0;
        int count;

        for(count = 0 ; input[count ]!='\0'; count++){
            if(isdigit(input[count]))//you should include ctype.h at the beginning of this program
                isInt=1;
            else if(input[count] == '.')
                isFloat=1;
            else
                return 0;//some character that neither int nor '.' char.
        }
      return 1;  
    }

int *
calc_1_svc(variable *argp, struct svc_req *rqstp)
{
    static int  result;

    int xy = isinteger((char *) argp->x) ;
    printf("%d",xy);


    switch(argp->choice){
        case 1:{
            result=(argp->x)+(argp->y);
            break;
        }
        case 2:{
            result=(argp->x)*(argp->y);
            break;
        }
        case 3:{
            result=(argp->x)-(argp->y);
            break;
        }
        case 4:{
            result=(argp->x)/(argp->y);
            break;
        }
        case 5:{
            result=(argp->x)%(argp->y);
            break;
        }

        case 6:{
            result=isprime(argp->x);
            break;
        }
        case 7:{
            result=isoddeve(argp->x,argp->y); 
            break;
        }

    }

    return &result;
}

client.c

void 
calc_prg_1(char *host){
    CLIENT *clnt;
    int *result_1;
    variable calc_1_arg;
    clnt = clnt_create (host, calc_prg, calc_version, "udp");

    if (clnt == NULL){
        clnt_pcreateerror (host); 
        exit (1);
    }

    printf("\n1 Addition \n2.Multiplication \n3.Subtraction \n4.Division \n5.Remainder \n6.Is first number prime? \n7. Odd or Even \nEnter choice : ");
    scanf("%d",&calc_1_arg.choice);
    printf("Enter values");
    scanf("%d %d",&calc_1_arg.x,&calc_1_arg.y);
    result_1 = calc_1(&calc_1_arg, clnt);


    if (result_1 == (int *) NULL) {
        clnt_perror (clnt, "call failed");
    }

    if(calc_1_arg.choice==7){
        if(*result_1==1)
        printf("\nYES\n");
        else
        printf("\nNO\n");
    }

    if(calc_1_arg.choice!=6 && calc_1_arg.choice!=7)
    printf("Your result is %d\n",*result_1);
    else if(calc_1_arg.choice==6 && *result_1==1)
    printf("\nYES\n");
    else if(calc_1_arg.choice==6 && *result_1==0)
    printf("\nNO\n");
    clnt_destroy (clnt);

}


int main (int argc, char *argv[]){
    char *host;
    if (argc < 2) {
        printf ("usage: %s server_host\n", argv[0]);
        exit (1);
    }
    host = argv[1];
    calc_prg_1 (host);
    exit (0);
}
...