Эффективное программирование TCP-IP


         

Если status не равно 0,


Если status не равно 0, то error завершает программу после печати диагностического сообщения; в противном случае она возвращает управление. Если err не равно 0, то считается, что это значение системной переменной errno. При этом в конце сообщения дописывается соответствующая этому значению строка и числовое значение кода ошибки.

Далее в примерах постоянно используется функция error, поэтому добавим в библиотеку.

Листинг2.4. Функция error

tcpserver.skel

1    void error( int status, int err, char *fmt,  ... )

2    {

3    va_list ap;

4    va_start ( ар, fmt );

5    fprintf (stderr, "%s: ", program_name );

6    vfprintf( stderr, fmt, ap ) ;

7    va_end( ap ) ;

8    if ( err )

9      fprintf( stderr, ": %s (%d)\n", strerror( err ), err);

10   if ( status )

11     EXIT( status );

12   }

В каркас включена также заглушка для функции server:

static void server(SOCKET s, struct sockaddr_in *peerp)

{

}

Каркас можно превратить в простое приложение, добавив код внутрь этой за­глушки. Например, если скопировать файл tcpserver.skel в и заме­нить заглушку кодом

static void server(SOCKET s, struct sockaddr_in *peerp)

{

 send( s, "hello, world\n", 13, 0);

}

то получим сетевую версию известной программы на языке С. Если откомпилировать и запустить эту программу, а затем подсоединиться к ней с помощью программы telnet, то получится вполне ожидаемый результат:

bsd: $ hello 9000

[1] 1163

bsd: $ telnet localhost 9000

Trying 127 .0.0.1...

Connected to localhost

Escape character '^]'.

hello, world

Connection closed by foreign host.

Поскольку каркас tcpserver. skel описывает типичную для TCP-сервера ситуацию, поместим большую часть кода main в библиотечную функцию tcp_serv показанную в листинге 2.5. Ее прототип выглядит следующим образом:

#include "etcp.h"

SOCKET tcp_server( char *host, char *port );

Возвращаемое значение: сокет в режиме прослушивания (в случае ошибки завершает программу).

Параметр host указывает на строку, которая содержит либо имя, либо IP – адрес хоста, а параметр port - на строку с символическим именем сервиса или номером порта, записанным в виде ASCII-строки.


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий