КЛІЄНТ-СЕРВЕРНОЇ АРХІТЕКТУРИ
					 
					Лістинг 1 Функція для читання запису змінної довжини (readvrec)
					 
 1 #include "../etcp.h"
 2 int readvrec( SOCKET fd, char *bp, size_t len )
 3 {
 4 u_int32_t reclen;
 5 int rc;
 6 rc = readn( fd, ( char * )&reclen, sizeof( u_int32_t ) );
 7 if ( rc != sizeof( u_int32_t ) )
 8 return rc < 0 ? -1 : 0;
 9 reclen = ntohl( reclen );
 10 if ( reclen > len )
 11 {
 12 while ( reclen > 0 )
 13 {
 14 rc = readn( fd, bp, len );
 15 if ( rc != len )
 16 return rc < 0 ? -1 : 0;
 17 reclen -= len;
 18 if ( reclen < len )
 19 len = reclen;
 20 }
 21 set_errno( EMSGSIZE );
 22 return -1;
 23 }
 24 rc = readn( fd, bp, reclen );
 25 if ( rc != reclen )
 26 return rc < 0 ? -1 : 0;
 27 return rc;
 28 }
  
 6...8 Довжина запису зчитується у змінну reclen. Функція readvrec повертає 0 (завершення файла), якщо число байтів, прочитаних readn, неповністю збігається з розміром цілого, чи 1 — у разі помилки.
 9 Розмір запису перетвориться з мережного порядку на машинний.
  
					Перевірка буфера
					10...23 Перевіряється, чи достатня є довжина буфера, наданого програмою, для розміщення в ньому всього запису. Якщо даних не вистачає, то дані зчитуються в буфер частинами по len байтів. Привласнюється змінній errno значення EMSGSIZE і повертає –1.
 
  
					Зчитування запису
					24..27 Зчитується сам запис. readvrec повертає –1, 0 чи reclen залежно від того, чи повернула readn код помилки, неповний лічильник нормального значення.