Книга: UNIX: разработка сетевых приложений

Пример: единственность отметки внеполосных данных в TCP

Пример: единственность отметки внеполосных данных в TCP

Нашим очередным примером мы иллюстрируем тот факт, что для данного соединения TCP существует всего одна отметка внеполосных данных, и если новые внеполосные данные прибудут прежде, чем принимающий процесс начнет считывать пришедшие ранее внеполосные данные, то предыдущая отметка будет утеряна.

В листинге 24.10 показана посылающая программа, аналогичная программе, приведенной в листинге 24.6. Отличие заключается в том, что сейчас мы добавили еще одну функцию send для отправки внеполосных данных и еще одну функцию write для записи обычных данных.

Листинг 24.10. Отправка двух байтов внеполосных данных друг за другом

//oob/tcpsend06.c
 1 #include "unp.h"
 2 int
 3 main(int argc, char **argv)
 4 {
 5  int sockfd;
 6  if (argc != 3)
 7   err_quit("usage: tcpsend04 <host> <port#>");
 8  sockfd = Tcp_connect(argv[1], argv[2]);
 9  Write(sockfd, "123", 3);
10  printf("wrote 3 bytes of normal datan");
11  Send(sockfd, "4", 1, MSG_OOB);
12  printf("wrote 1 byte of OOB datan");
13  Write(sockfd, "5", 1);
14  printf("wrote 1 byte of normal datan");
15  Send(sockfd,. "6", 1, MSG_OOB);
16  printf("wrote 1 byte of OOB datan");
17  Write(sockfd, "7", 1);
18  printf("wrote 1 byte of normal datan");
19  exit(0);
20 }

В данном случае отправка данных происходит без пауз, что позволяет быстро переслать данные собеседнику.

Принимающая программа идентична программе, приведенной в листинге 24.7, где вызывается функция sleep, которая после установления соединения переводит получателя в спящее состояние на 5 с, чтобы позволить данным прибыть на принимающий TCP. Ниже приводится результат выполнения этой программы:

freebsd4 % tcprecv06 5555
read 5 bytes: 12345
at OOB mark
read 2 bytes: 67
received EOF

Прибытие второго байта внеполосных данных (6) изменяет отметку, которая ассоциировалась с первым прибывшим байтом внеполосных данных (4). Как мы сказали, для конкретного соединения TCP допускается только одна отметка внеполосных данных.

Оглавление книги


Генерация: 3.352. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз