MC833 - Programação em Redes de Computadores - 1s 2014
Exercício 4: Servidor TCP Concorrente
Professora Juliana Freitag Borin
Objetivo: Aprender a programar um servidor TCP concorrente.
Critérios para entrega e correção do exercício:
1. este exercício é individual;
2. O material a ser entregue deve ser enviado em um arquivo .tar.gz para
até às 9:59 do dia 27/03/2014. O nome do arquivo deve ser "exercicio4-raXXXXX", onde XXXXX deve ser substituído pelo número do seu RA;
3. o assunto da mensagem deve ser "MC833 - exercício 4";
4- a nota da atividade será 0 ou 1. 1, caso todas as questões estejam respondidas de forma satisfatória E a entrega atenda aos critérios 1, 2 e 3; 0, caso contrário.
Atividades
Passos:
- Modifique o programa client.c da atividade anterior para que ele obtenha os números do socket local (# IP, # porta local) através da função getsockname(). Imprima esse valores na saída padrão.
- Modifique o programa server.c da atividade anterior, para que este obtenha os números do socket remoto do cliente (# IP remoto, # porta remota), utilizando a função getpeername(). Imprima esses valores na saída padrão.
- Modifique o programa server.c para que ele consiga estabelecer mais de uma conexão ao mesmo tempo, usando processos tradicionais (fork). Comente o código que você adicionou.
- No trecho de código abaixo, que muito provavelmente estará presente
no código que você implementou, porque o servidor continua escutando e
os clientes continuam com suas conexões estabelecidas mesmo após as
chamadas dos Close?
for (;;) {
connfd = Accept (listenfd,...);
if ( (pid=Fork()) == 0) {
Close(listenfd);
doit(connfd); // Faz alguma operação no socket
Close(connfd);
exit(0);
}
Close(connfd);
}
- Comprove, utilizando ferramentas do sistema operacional, que os processos criados para manipular cada conexão individual do servidor aos clientes são filhos do processo original que foi executado.
- Utilizando ferramentas do sistema operacional, qual dos lados da conexão fica no estado TIME_WAIT após o encerramento da conexão? Isso condiz com a implementação que foi realizada? Justifique.
Material a ser entregue:
- um único arquivo .pdf contendo o relatório comprovando a execução
de todos os passos acima (Devem ser incluídas as saídas das execuções
dos programas e devem ser respondidas as questões).
- Os códigos
server.c
e client.c
modificados conforme solicitado nos passos acima e devidamente
comentados.
- um único arquivo .pdf contendo os códigos do
server.c
e client.c
(Podem ser utilizados os programas a2ps e ps2pdf para gerar o arquivo -- Leia a manpage do a2ps!!! Por padrão a saída é enviada direto para a impressora!!!).