--- libaitrpc/example/tsrvext.c 2015/01/18 11:18:14 1.1.2.1 +++ libaitrpc/example/tsrvext.c 2024/03/20 17:32:30 1.4 @@ -1,5 +1,9 @@ #include +#include +#include +#include #include +#include #include #include "rc.h" @@ -114,14 +118,41 @@ int big(rpc_cli_t *cli, struct tagRPCCall *rpc, array_ int main(int argc, char **argv) { rpc_func_t *f; - int ret; + int ret, fds[2]; - srv = rpc_srv_initServerExt(2, 1024 * 10, 0); + if (argc < 2) { + printf("not enough parameters ... where is tcliext program?\n"); + return 1; + } + + if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fds) == -1) { + printf("error:: errno=%d %s\n", errno, strerror(errno)); + return 1; + } + + switch (fork()) { + case -1: + printf("error:: errno=%d %s\n", errno, strerror(errno)); + return 1; + case 0: + close(fds[1]); + dup2(fds[0], 2); + close(fds[0]); + sleep(1); + execl(argv[1], argv[1], NULL); + return 127; + default: + close(fds[0]); + } + + srv = rpc_srv_initServerExt(2, 1024 * 10, fds[1]); if (!srv) { printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError()); return 1; } + rpc_srv_DispatchSignal(srv, 42); + rpc_srv_registerCall(srv, RC_aaa, aaa); rpc_srv_registerCall(srv, RC_BBB, BBB); rpc_srv_registerCall(srv, 3, NULL); @@ -134,6 +165,9 @@ int main(int argc, char **argv) rpc_register_srvServices(srv); rpc_srv_loopServer(srv); + rpc_srv_DispatchSignal(srv, 0); rpc_srv_endServer(&srv); + close(fds[1]); + wait(&ret); return 0; }