Валится то сервер, то клиент с "segmentation fault". Если убираю строки из параметров/возвр.значений, то все работает. У Стивенса в "UNIX: взаимодействие процессов" в примерах тоже одни int-ы передаются и в статье http://solaris.opennet.ru/base/dev/rpc_example.txt.html тоже. Где ошибка? Где про это подробнее можно почитать? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ first.x : struct proc1_in { string name<30>; int age; }; struct proc1_out { string msg<30>; int prio; }; struct proc2_in { string name<30>; int age; }; struct proc2_out { string msg<30>; int prio; }; program FIRST_PROG { version FIRST_VERS { proc1_out FIRST_PROC1(proc1_in) = 1; proc2_out FIRST_PROC2(proc2_in) = 2; } = 1; } = 0x31678860; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ server: bool_t first_proc1_1_svc(proc1_in *inp, proc1_out *outp, struct svc_req *rqstp) { fprintf(stderr, "%s: name:\"%s\" age:%d\n", __func__, inp->name, inp->age); outp->msg = "proc1"; outp->prio = 1; return TRUE; } bool_t first_proc2_1_svc(proc2_in *inp, proc2_out *outp, struct svc_req *rqstp) { fprintf(stderr, "%s: name:\"%s\" age:%d\n", __func__, inp->name, inp->age); outp->msg = "proc2"; outp->prio = 2; return TRUE; } int first_prog_1_freeresult (SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result) { xdr_free(xdr_result, result); return 1; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ client: void client(char *host) { CLIENT *clnt; enum clnt_stat retval_1; proc1_out result_1; proc1_in first_proc1_1_arg; enum clnt_stat retval_2; proc2_out result_2; proc2_in first_proc2_1_arg; first_proc1_1_arg.name = "Vasya"; first_proc1_1_arg.age = 26; first_proc2_1_arg.name = "Kostya"; first_proc2_1_arg.age = 14; clnt = clnt_create (host, FIRST_PROG, FIRST_VERS, "tcp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } retval_1 = first_proc1_1(&first_proc1_1_arg, &result_1, clnt); if (retval_1 != RPC_SUCCESS) { clnt_perror (clnt, "call failed"); } printf("%s %d\n", result_1.msg, result_1. prio); retval_2 = first_proc2_1(&first_proc2_1_arg, &result_2, clnt); if (retval_2 != RPC_SUCCESS) { clnt_perror (clnt, "call failed"); } printf("%s %d\n", result_2.msg, result_2. prio); clnt_destroy (clnt); }
Ответ на:
Еще он у меня все равно получился не многопоточный
от vasirck
Ответ на:
комментарий
от vasirck
Ответ на:
комментарий
от vasirck
Ответ на:
комментарий
от vasirck
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Компиляция C (onc rpc) и C++ кода вместе (2007)
- Форум wayland server имплементация, создание глобальных объектов (2021)
- Форум libxml2, XPath и namespace (2007)
- Форум Segmentation fault (2009)
- Форум Передача стурктуры sendto, recfrom (2012)
- Форум Сокеты (2019)
- Форум И вновь потоки[C] (2012)
- Форум проблема с сокетами [C] (2009)
- Форум разбираюсь с классами непонятные ошибки при компиляции объясните в чем я неправ??? (2010)
- Форум ПОМОГИТЕ С ПРОГРАММОЙ. (2010)