Я столкнулся с проблемой "Ошибка сегментации" с 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);
}