[Comm] Q: Programming sockets in C language troubles

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Пн Май 19 16:14:22 MSD 2003


On Mon, May 19, 2003 at 03:38:00PM +0400, Andrey Brindeew wrote:
> На работе встала задача перегонять данные с одной машины (расчетная,
> сервер) на другую (отображение) по сети. В качестве языка используется
> Си, ОС Linux, поэтому было решено использовать сокеты для передачи, дабы
> ничего не изобретать ("всё уже украдено до нас" (C) :-) )
> 
> Берем тривиальный пример из документации по glibc (pinfo select, самая
> последняя ссылка на странице: Server Example). Чуть-чуть дорабатываем
> (избавляемся от функции make_socket путем включения ее в программу) и
> пытаемся тестить:
> 
> $ gcc -o srv{,.c}
> $ ./srv
> 
> На другой консоли:
> $ telnet 127.0.0.1 1200
> Trying 127.0.0.1...
> Connected to 127.0.0.1.
> Escape character is '^]'.
> protocol_command 12345

$ apropos telnet netcat
telnet               (1)  - user interface to the TELNET protocol
netcat               (1)  - arbitrary TCP and UDP connections and listens

> Переключаемся на серверную консоль: _тишина полная_.
> Нажимаем Enter три (или больше) раз - видим следующее:
> 
> $ ./srv
> 
> got message from 0 client: `
> ╛@пВЪ©PВЪ©└'

Это telnet protocol, RFC 854.
[...]

> Теперь вопросы:
>  1. Почему у нас на серверной консоли фигурируют 0, 1 и 2 сокеты (я
>     так понимаю, что это stdin, stdout и stderr сервера собственной
> 	персоной)? Я их в FD_SET не заказывал на прослушивание с помощью
> 	select. :-(

А кто будет FD_ISSET делать?

>  2. Что за мусор идет после подстроки "protocol_com"? Я так понимаю, что
>     буфер чтения у сокета заполнился (ибо 12 символов всего), но откуда
> 	мусор?

Это telnet protocol, RFC 854.

>  3. Почему сообщение о подсоединении клиента не появилось сразу же после
>     того, как я подцепился к серверу с помощью telnet?

Это telnet protocol, RFC 854.

>  4. Я наверное еще много чего не понимаю, какая хорошая литература есть
>     в сети и код какой _хорошо написанной_ программы можно посмотреть
> 	для примера? В исходниках sshd и popa3d запутался... :-(

Stevens W.R. UNIX Network Programming, Volume 1, Second Edition,
Networking APIs: Sockets and XTI // Prentice Hall, Upper Saddle River,
N.J., 1998

Есть (в Москве наверняка) перевод на русский язык, но имейте в виду, что,
в отличие от перевода второго тома, перевод этого тома содержит тьму
ошибок.


--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20030519/b88a6732/attachment-0004.bin>


Подробная информация о списке рассылки community