IC-UNICAMP - MC823AB Prof. Paulo Lício de Geus / Mon. Felipe M Pereira 1s2004 %!encoding: iso-8859-1 = Atividades = - 16/jun A05 - Demonstração: qui 01/07 - [RPC e RMI a05_rpc_rmi.html] - 26/mai A04 - Entrega: qui 10/jun - [E/S Multiplexada a04_select.html] - 27/abr A03 - Entrega: dom 16/mai - [Sockets UDP a03_udp.html] - 22/mar A02 - Entrega: qui 15/04 - [Servidor concorrente/Exercícios a02_servconc.html] - 06/mar A01 - Entrega: qui 18/mar - [Cliente e Servidor TCP a01_cliserv.html] Entregar um relatório em formato eletrônico. Não será solicitada demonstração. = Novidades = - 12/07 - Notas disponíveis - 30/jun - Tutorial detalhado de RPC em [src/a05 src/a05] - 16/jun - Atividade 05. - 26/mai - Atividade 04. - 27/abr - Atividade 03. - 24/mar - FAQ atualizada; - Mais referências na Atividade 02/A; - 22/mar - Atividade 02; - Links adicionais. - 15/mar - Informações adicionais sobre funções `getnameinfo()` e `getaddrinfo()` (Atividade 01); - Links sobre independência de protocolo e padronização. - 09/mar - Exercício sobre `getsockname()` e `getpeername()`. - 06/mar - Atividade 01. - 04/mar - Atualizadas instruções sobre compilação do código-fonte do livro; - Página no ar. = FAQ = Obs.: Depois de categorizada, uma FAQ é anexada ao fim da categoria. + Burocracia + Até que horas posso entregar meu relatório? **R:** //O relatório deverá ser entregue até a meia-noite, em formato eletrônico.// + Sistema/Compilação + Recebi a seguinte mensagem de erro: --- /lib/libc.so.6: undefined reference to `__libc_stack_end@GLIBC_2.1' collect2: ld returned 1 exit status --- **R:** //Isso deve ocorrer para quem usa o ambiente do GPSL. Adicione a linha `GPSL_PRIORITY=1` antes da chamada `~gpsl/configurar_area.sh` ao seu arquivo de inicialização do shell.// + Onde encontro sistema Solaris e máquinas SPARC? **R:** //As máquinas `tigre.ic.unicamp.br` e `pinheiros.ic.unicamp.br` são SPARC e rodam SunOS (Solaris que mudou de nome).// % % + O que significa `send(2)`? Por que o número entre "(2)"? % %**R:** //Trata-se de uma página de manual (man). As páginas de manual estão organizadas em seções (geralmente debaixo do diretório `/usr/man` ou `/usr/share/man`). O número indica a seção em que está a página. O comando "`man send`" procura e exibe a primeira página de nome `send.*.gz` nessa hierarquia. Em alguns casos, a primeira ocorrência não é a página desejada. Para especificar a seção desejada, passa-se o número da mesma antes do nome da página como em "`man 2 send`". V. também `man(1)`. + Como compilar no Solaris? **R:** //Para compilar no Solaris, use:// --- gcc -Wall -o arq arq.c -lsocket -lresolv -lnls --- + Onde encontro sistemas Linux aos quais posso me conectar de fora do IC? **R:** //As máquinas `belem.ic.unicamp.br` e `manaus.ic.unicamp.br` rodam Linux e servidor de acesso remoto seguro (SSH) e estão integradas ao ambiente do IC (montam `home`).// + Atividade 02 + Parte A + Na [seção "Handling partial sends" no guia do Beej http://www.ecst.csuchico.edu/~beej/guide/net/html/advanced.html#sendall] lê-se que pode acontecer que `send()` não envie todos os dados em uma só chamada. Ainda na mesma seção é apresentada a função `sendall()` que repete o `send()` até mandar todos os dados. Devo implementar/usar `sendall()` (ou similar) neste experimento? **R:** //Não. O objetivo do experimento é demonstrar que não há correspondência entre o número de `send()`s e o número de `recv()`s. Para tal, o cliente deve efetuar apenas **um** `send()` de (cerca de) 32KB de dados e mostrar quanto foi realmente enviado. Foi constatado que, no Linux, todos os 32KB são enviados em uma chamada.// //Já no lado servidor, será necessário, sim, repetir `recv()` até que `recv(...)==0` (fim da transmissão). Não use o indicador `MSG_WAITALL`.// Leitura recomendada: - `send(2)` (em especial sobre a opção `MSG_DONTWAIT`, que não deve ser usada na atividade 2); - opção `SO_SNDTIMEO` em `socket(7)`, que diz que no Linux `send()` não é interrompido por timeout (isso ocorre no BSD, de acordo com livro TCP/IPv2; visto que o livro é de 1995, pode ter mudado desde então). + Atividade 01 + Preciso fazer um cliente de eco também ou apenas o servidor? **R:** //Sim, precisa.// + Tentei redirecionar a entrada do comando telnet para um arquivo da seguinte forma: --- telnet localhost 3490 < arquivo --- e recebi a mensagem de erro "Broken pipe". O que aconteceu? **R:** //O telnet é um comando interativo e espera que a entrada padrão seja um terminal. Para mais informações veja a página http://linuxgazette.net/issue50/tag/34.html e o comando `netcat/nc(1)`.// = Referências = - Números de portas: - [RFC 1700 http://ftp.unicamp.br/pub/RFC/rfc1700.txt.gz], //Assigned Numbers//. - http://www.iana.org/assignments/port-numbers - `/etc/services` - Independência de Protocolo na API Sockets: embora IPv6 não seja abordado neste curso, seu surgimento evidenciou que algumas funções dificultavam a portabilidade de programas e elas foram obsoletadas por grupos de padronização (IETF e POSIX). Detalhes em: - //[Protocol Independence Using the Sockets API http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html]//, artigo da USENIX - [RFC 3493 http://ftp.unicamp.br/pub/RFC/rfc3493.txt.gz], //Basic Socket Interface Extensions for IPv6// (obsoletou [RFC 2553 http://ftp.unicamp.br/pub/RFC/rfc2553.txt.gz], que por sua vez obsoletava [RFC 2133 http://ftp.unicamp.br/pub/RFC/rfc2133.txt.gz]) - POSIX 1003.1g (versão eletrônica não disponível) - Padronização - PASC (POSIX): http://www.pasc.org/ - IEEE/Open Group Single UNIX Specification (POSIX 1003.1) http://www.unix-systems.org/single_unix_specification/ (é necessário se identificar) - Ordem de bytes (byte ordering): - http://www.netrino.com/Publications/Glossary/E.html#endianness - http://www.sun.com/realitycheck/headsup980803.html - http://en.wikipedia.org/wiki/Endianness - Administrativos - Alunos matriculados nas turmas: [MC823A https://www.sistemas.unicamp.br/cgi-bin/ensino/matricula/matriculados.cgi?nivel=G&periodo=1S&ano=2004&tipo=1&distur=MC823A] [MC823B https://www.sistemas.unicamp.br/cgi-bin/ensino/matricula/matriculados.cgi?nivel=G&periodo=1S&ano=2004&tipo=1&distur=MC823B] = Horário = - Turma A/B: quinta-feira, das 16h às 18h, salas 303/304. = Contato/Atendimento = - Prof. Paulo Lício de Geus - sala 26, IC-1 - email: paulo@las.ic.unicamp.br - Mon. Felipe M Pereira - permanência no LAS (sala 84, IC-1). - email: felipe@las.ic.unicamp.br = Bibliografia = == Sockets == - Guia do Beej para Programação de Rede http://www.ecst.csuchico.edu/~beej/guide/net/ : Este guia oferece uma introdução rápida a programação com sockets. - W. Richard Stevens. UNIX Network Programming volume 1 - Networking APIs: Sockets and XTI. Prentice Hall PTR; 2nd edition (January 15, 1998). ISBN: 013490012X. Biblioteca Unicamp: [1 exemplar no IQ http://libweb.unicamp.br/cgi-bin/gw_40_3/chameleon?host=acervus.unicamp.br%206666%20DEFAULT&search=KEYWORD&function=ITEM&SourceScreen=COPVOLSCR&sessionid=005620434422008&skin=portal&conf=.%2fchameleon.conf&itemu1=2000&itemu1=2000&itemt1=@598502&u1=2000&t1=@598502&scanu1=4&lng=pt&recsperpage=10&pos=1&prevpos=1&totalitems=3&itempos=2&scant1=unix%20network%20programming&] - Há também alguns exemplares no IMECC (1ª e 2ª edições; referências não encontradas no sistema) - Site oficial do livro: http://www.kohala.com/start/unpv12e.html - Download dos exemplos do livro e instruções: [README.unp README.unp.html] - A 3ª edição deste livro foi escrita por outros autores (Stevens já falecera): W. Richard Stevens, Bill Fenner, Andrew M. Rudoff. UNIX Network Programming Volume 1. 3ª edição. Ed. Prentice Hall. ISBN: 0131411551 = Datas importantes = Do [calendário de graduação http://www.unicamp.br/prg/dac/calendarios/calgra2004.php]: - Desistência de matrícula: 03/mar a 28/abr - Avaliação de Cursos: 04/mai - Último dia para trancamento de matrícula: 26/mai - Prazo final para o cumprimento da carga horária: 03/jul - Semana de estudos: 05/jul a 10/jul - Período de exames finais: 12/jul a 17/jul - Não haverá aulas: 08/abr e 10/jun -------------------- //by Felipe M. Pereira// made with [txt2tags http://txt2tags.sf.net/]