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