From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 19 May 2003 16:14:22 +0400 From: "Dmitry V. Levin" To: ALT Linux general discussion list Subject: Re: [Comm] Q: Programming sockets in C language troubles Message-ID: <20030519121422.GA3240@basalt.office.altlinux.org> References: <20030519113800.GA18016@abr.tool.ru> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="vtzGhvizbBRQ85DL" Content-Disposition: inline In-Reply-To: <20030519113800.GA18016@abr.tool.ru> X-fingerprint: 9658 398D 181B 1200 8FC5 26B8 F6F8 846B C1E2 3429 Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: --vtzGhvizbBRQ85DL Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit 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 --vtzGhvizbBRQ85DL Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQE+yMqe9viEa8HiNCkRApZLAJ91joREPpjTCHK9ji667U5CVriubgCfUgja Ajzk515fE7Df1loO2/Dv/y0= =eiuj -----END PGP SIGNATURE----- --vtzGhvizbBRQ85DL--