на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 16.10. Клиент для изучения свойств соединения по TCP

//sunrpc/square9/client.c

1  #include "unpipc.h" /* наш заголовочный файл*/

2  #include "square.h" /* создается rpcgen */


3  int

4  main(int argc, char **argv)

5  {

6   CLIENT, *cl;

7   square_in in;

8   square_out *outp;

9   if (argc != 3)

10   err_quit("usage: client ");

11  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, "tcp");

12  in.arg1 = atol(argv[2]);

13  if ((outp = squareproc_1(&in, cl)) == NULL)

14   err_quit("%s", clnt_sperror(c1, argv[1]));

15  printf("result: %ld\n", outp->res1);

16  in.arg1 *= 2;

17  if ((outp = squareproc_1(&in, cl)) == NULL)

18   err_quit("%s", clnt_sperror(cl, argv[1]));

19  printf("result: %ld\n", outp->res1);

20  clnt_destroy(cl);

21  pause();

22  exit(0);

23 }

После запуска получим ожидаемый результат:

solaris % client kalae 5

result: 25

result: 100

программа в состоянии ожидания, пока мы не завершим ее вручную

Однако проверить наши предыдущие утверждения можно лишь с помощью результатов работы программы tcpdump. Она показывает, что создается одно соединение по TCP (вызовом clnt_create) и оно используется для обоих запросов клиента. Соединение завершается вызовом clnt_destroy, хотя клиент при этом и не завершает свою работу.


Управление соединением по TCP | UNIX: взаимодействие процессов | Идентификатор транзакций