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:
  1. 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.
  2. 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.
  3. 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.
  4. 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?
  5. for (;;) {
       connfd = Accept (listenfd,...);
    
       if ( (pid=Fork()) == 0) {
          Close(listenfd);
          doit(connfd); // Faz alguma operação no socket
          Close(connfd);
          exit(0);
       }
       Close(connfd);
    }
    
  6. 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.
  7. 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:
  1. 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).
  2. Os códigos server.c e client.c modificados conforme solicitado nos passos acima e devidamente comentados.
  3. 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!!!).
Monitor: Carlos A. Astudillo, email: