Comunicação entre Processos. 1. Pipes 2. Fifos 3. Sockets

Documentos relacionados
Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS

Introdução à Programação Sockets

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

Programação com Sockets. Redes de Computadores I 2007/2008

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP.

Aula de Socket. Rafael De Tommaso do Valle

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Sistemas de Operação Sockets

sockets interprocess communication Taisy Weber

Comunicação entre Processos

Soquetes TCP. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket()

Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

Comunicação entre processos. Sistema centralizado

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP

Programação de Aplicações em. Rede usando Sockets

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

Sumário. Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Comunicação baseada em canais de I/O e Pipelines no sistema Unix. José C. Cunha, DI-FCT/UNL

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Sistemas Distribuídos

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

Sistemas Operacionais II

Programação com Sockets

COMUNICAÇÃO ENTRE APLICAÇÕES. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Programação TCP/IP (sockets)

Comunicação entre Processos

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

MC823 Atividade 1: Cliente/Servidor TCP Iterativo. 3 Modificando o servidor para retornar data e hora

Serviços de Comunicações Capítulo 3

Redes de Computadores e Aplicações

Programação de Sistemas. Tubos

camada de transporte SOCKET TCP UDP

Grupo I [6 v] Considere o processo com a seguinte tabela de páginas: Página Presente Protecção Base 0 0 RW RW R R RW -

Comunicação entre Processos

Programação de Sockets em C/C++

Redes de Computadores

LEIC/LERC 2009/10 Repescagem do 2º Teste de Sistemas Operativos

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Programação Orientada a Objetos para Redes de Computadores. Modelo Cliente-Servidor. Comunicação entre Processos. O que é um Socket?

Programação Orientada a Objetos para Redes de Computadores

Protocolos TCP e UDP. Protocolo TCP. Protocolo TCP. A necessidade de uma comunicação segura: Transmission Control Protocol

PROTOCOLOS DE COMUNICAÇÃO

Redes de Computadores

Por Fernando Koyanagi

Canais de Comunicação

Problemas relacionados a exclusão mútua

Redes de Computadores. A arquitectura protocolar TCP/IP

Redes de comunicação. Mod 2 Redes de computadores. Professor: Rafael Henriques

Redes e Serviços Internet (11103)

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa

Ambientes de Execução

Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

Programação com sockets (em Java)

LEIC/LERC 2008/09. Segundo Teste de Sistemas Operativos. Grupo I [3 valores]

Camada de Transporte Protocolos TCP e UDP

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC

Unnamed Pipes. Chamada ao sistema pipe. Pipes. Comunicação entre processos. Unnamed Pipes Chamada so sistema. José Pedro Oliveira

Um Tutorial sobre Sockets Parte I

Comunicação entre Processos Named Pipes (FIFO)

Módulo 3 Nível Transporte

Redes de Computadores

Leandro Soares de Sousa (DSc.) Página: Parte III

Eng.ª Informática - Cadeira de Redes de Computadores. Frequência 2º Semestre Avaliação Contínua. 5 de Julho de 2007

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

LEIC/LERC 2011/12-1º Exame de Sistemas Operativos 16/Janeiro/2012

Redes de Computadores II. Programação com Sockets em Python

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Inter-process Communication (IPC)

RC Peer-to-Peer. 1. Introdução. 2. Especificação. Redes de Computadores 2º Semestre 2008/2009. Projecto de Laboratório

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

Redes de Computadores. Protocolos TCP/IP

Redes de Computadores. Prof. Msc André Y. Kusumoto

Programação de Sistemas

Redes de Computadores

Funções da. Os principais serviços oferecidos pela camada de transporte são: Controle de conexão, Fragmentação, Endereçamento e Confiabilidade.

06/10/2015. Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES. UDP User Datagram Protocol. UDP User Datagram Protocol

Sockets e Threads em Java

Direto ou Indireto Monolítico ou Estruturado Simétrico ou Assimétrico Padronizado ou Não-Padronizado

Protocolos de Rede. Protocolos em camadas

TRANSPORTE. Prof. Me. Hélio Esperidião

Redes de Computadores. Prof. André Y. Kusumoto

Memória partilhada em Unix SysV

Transcrição:

Comunicação entre Processos 1. Pipes 2. Fifos 3. Sockets

Pipes Implementa um canal de comunicação associado a um processo Limitações: Os dados apenas fluem num sentido Só podem ser usados entre processos com um mesmo antepassado #include<unistd.h> Int pipe(int filedes[2]); /*devolve 0 se OK -1 se erro */ 12/16/2002 Sistemas Operativos 2001/2002 2

Pipes Kernel Processo A write(p[1],...) read(p[0],...) Chamada ao sistema pipe cria um par de descritores de ficheiros que referenciam um inode pipe PIPE Objectivo: comunicação entre processos Filho herda todos os dados declarados no processo pai fork ( ) Processo A Tanto pai como filho conhecem o read(p[0],...) mesmo pipe write(p[1],...) Se um escrever e o outro ler, a comunicação está estabelecida PIPE Tanto pai como filho podem ler e escrever do pipe. Cabe ao programador definir o sentido da comunicação. Processo A 12/16/2002 Sistemas Operativos 2001/2002 3

Pipes Processo A fork ( ) PIPE read(p[0],...) Processo A write(p[1],...) Comunicação bidireccional precisa de dois pipes Leitura de uma mensagem de pipe pipe vazio bloqueia o processo até que lá seja colocada uma mensagem Quando um um dos dos lados do do pipe pipeé fechado: Se Se lermos de de um um pipe pipecujo extremo de de escrita tenha sido sido fechado e todos os os dados consumidos read readdevolve 0 indicando fim fim de de ficheiro. Se Se escrevermos num num pipe pipecujo extremo tenha sido sido fechado é gerado um um sinal sinal SIGPIPE. Se Se este este for for ignorado ou ou a função de de tratamento o ignorar, a função write devolve erro erro sendo o valor igual a EPIPE. 12/16/2002 Sistemas Operativos 2001/2002 4

Pipes Exemplo - Troca de mensagens entre processo pai e filho #define MSGSIZE 25 Char *msg1= Msg entre processos 1 ; Char *msg2= Msg entre processos 2 ; Char *msg3= Msg entre processos 3 ; int main( ){ mensagem int pid, p[2], i; Char buff[msgsize]; if pipe(p)<0 { perror( Erro na criação do pipe ); exit(1); } if ((Pid= fork ( ))==0) {; /* Processo Filho */ close(p[0]); write(p[1],msg1,msgsize); write(p[1],msg2,msgsize); write(p[1],msg3,msgsize); } else /* Processo Pai */ if (pid > 0) { /* Processo Pai */ close(p[1]); for( i=0 ; i<3 ; i++ ) { read(p[0],buff,msgsize); printf( Recebi:%s\n,buff ); } } else printf( Erro no fork!...\n ); 12/16/2002 Sistemas Operativos 2001/2002 5 }

Fifos Permite a comunicação entre processos sem qualquer relação de parentesco Comunicação realizada por um canal de comunicação permanente e acessível a qualquer processo, suportado por um ficheiro especial FIFO Depois de criado (funções mknode ou mkfifo) abre-se com a função open. Função de manipulação: close, read, write, unlink, etc (funções normais de I/O) 12/16/2002 Sistemas Operativos 2001/2002 6

Fifos #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> Int mknod (const char *pathname, mode_t mode, dev_t dev); /* 0 se OK, -1 se erro*/ Int mkfifo(const char *pathname, mode_t mode) /* 0 se OK, -1 se erro*/ Tal Tal como nos nos pipes: quando o último ficheiro escritor fecha o fifo fifoé gerado um um fim fim de de ficheiro para para o leitor do do fifo fifo se se escrevermos para para um um ficheiro sem sem nenhum processo com com ele ele aberto, é gerado o sinal sinal SIGPIPE 12/16/2002 Sistemas Operativos 2001/2002 7

IPCs entre diferentes máquinas Comunicação entre processos em diferentes máquinas Quando os processos existem em máquinas distintas Bidireccional 12/16/2002 Sistemas Operativos 2001/2002 8

Berkley Sockets Índice de tópicos Comunicação entre processos usando sockets Arquitectura Cliente Servidor Rede Hosts, Portos, interfaces e sockets Modelos de ligação Sockets Comparação Cenários Exemplo 12/16/2002 Sistemas Operativos 2001/2002 9

Comunicação entre processos usando Sockets Msg, queues, pipes, memória partilhada, semáforos, ficheiros... Permitem comunicação entre processos Mas entre processos dentro da mesma máquina Como conseguir comunicação entre sistemas remotos? Acesso FTP Telnet Máquinas ligadas em Cluster HTTP ICQ R: R: usando usando FTP,Telnet, FTP,Telnet, Cluster Cluster (maquinas (maquinas com com ligações ligações dedicadas dedicadas de de alta alta velocidade, velocidade, normalmente normalmente fibra fibra optica) optica) 12/16/2002 Sistemas Operativos 2001/2002 10

Arquitectura Cliente-servidor Daemon corre num computador Actua como servidor Nome do programa termina com d (UNIX, Linux) Ftpd / Httpd Servidor escuta a rede num porto pré-definido Normalização de portos para os protocolos mais comuns Ficheiro /etc/services (Unix,linux), ou C:\winnt\System32\drivers\etc\services Porto representa um identificador do processo que escuta a rede Juntamente com o IP da máquina controi um chave única Processo nível utilizador devem usar portos > 1024 Os restantes (<1024 ) só para processos com privilégios superuser 12/16/2002 Sistemas Operativos 2001/2002 11

Arquitectura Cliente-servidor Responsabilidades do servidor Segurança Atender pedidos de clientes Gerir a transmissão dos dados Resolver os pedidos de forma apropriada Programa cliente Liga ao servidor Pede dados Fornece a informação ao utilizador 12/16/2002 Sistemas Operativos 2001/2002 12

Rede Permite ligação entre duas máquinas remotas Precisa de endereço IP Identifica univocamente cada sistema Permite partilha de informação Permite cooperação entre processos 12/16/2002 Sistemas Operativos 2001/2002 13

Rede Dois modelos de ligação Orientado à conecção (Connection Oriented) TCP (transmission Control Protocol) FTP Telnet Conectionless Oriented UDP (User Datagram Protocol) HTTP 12/16/2002 Sistemas Operativos 2001/2002 14

Hosts, Portos, Interfaces e Sockets Host X Processo 1 Processo 2 socket TCP socket UDP Portos 1 a 65535 Interface 0 Interface 1 192.168.21.22 192.168.22.23 (ex: Ethernet) (ex: Fast Ethernet) 12/16/2002 Sistemas Operativos 2001/2002 15

Modelos de ligação Orientado à ligação Circuitos virtuais Não interrompe a ligação Garante que toda a informação é entregue/recebida Recepção da informação é confirmada Garante integridade da informação Necessário quando se tem de garantir a validade da informação Maior o peso na comunicação ligação mais lenta (ex: telefone via rede voice over IP) 12/16/2002 Sistemas Operativos 2001/2002 16

Modelos de ligação Connectionless Oriented Pequenos pacotes de mensagens enviados para diferentes endereços Não tem ligação definida Não verifica integridade de dados ou confirmação de recepção Não pode garantir que foi recebido 12/16/2002 Sistemas Operativos 2001/2002 17

Modelos de ligação Connectionless Oriented Menos carga de gestão de dados maior velocidade de comunicação Modelo usado pelo protocolo HTTP (a informação não é a principal preocupação) É da responsabilidade do cliente garantir que toda a informação foi recebida Voltar a pedir informação que não recebeu 12/16/2002 Sistemas Operativos 2001/2002 18

Sockets Conceitos Socket Ponto de ligação para comunicação Dois processos podem comunicar, criando sockets e enviando mensagens entre eles Tipo de socket é determinado por: < Domínio, Tipo, Protocolo > Domínio : para se alcançar o socket remoto é necessário que tenha nome. O formato do nome é dependente do Domínio da comunicação ou Address Family a que o socket pertence Tipo: Semântica da comunicação para sockets Protocolo : qual o protocolo que suporta o socket 12/16/2002 Sistemas Operativos 2001/2002 19

Sockets Criação - Domínio Socket_descriptor= socket(domain, type, protocol) Int Socket_descriptor, domain, type, protocol Domínio de comunicação ou Address Family Define o formato do endereço Todas as operações posteriores vão interpretar o endereço dado de acordo com este formato Tipos de formato definidos ( em <sys/sockets.h> ): AF_UNIX (espaço de nomes UNIX) AF_INET (Endereços internet DARPA ) AF_OSI,... 12/16/2002 Sistemas Operativos 2001/2002 20

Sockets Criação Quando o socket é criado, não tem endereço É preciso ligar (Bind) o socket a um endereço O socket só tem nome quando lhe é explicitamente atribuido um endereço através do system call bind() Status = bind(sock, address, addrlen); int status; /* 0 se sucesso, -1 caso contrário */ int sock; /* descritor */ struct address; /* endereço de rede/máquina */ int addrlen; /* dimensão (bytes) do endereço */ 12/16/2002 Sistemas Operativos 2001/2002 21

Sockets Criação Domínio UNIX AF_UNIX Espaço de nomes UNIX Usa nomes de directorias O socket é criado no sistema de ficheiros Necessários cuidados adicionais quando se fecha o socket Só permite comunicação entre processos dentro da mesma máquina #include<sys/un.h> struct sockaddr_un { short sun_family; /* AF_UNIX */ char sun_path[108-4];/*path name*/ } 12/16/2002 Sistemas Operativos 2001/2002 22

Sockets Criação Domínio Internet AF_INET endereços internet DARPA Contituido por 2 partes: Endereço de máquina (nº rede + nº máquina) Número do porto É o endereço máquina que permite a processo em máquinas diferentes comunicarem O porto define multiplos endereços dentro da mesma máquina 12/16/2002 Sistemas Operativos 2001/2002 23

Sockets Criação Domínio Internet #include<netinet/in.h> struct sockaddr_in { short sin_family; /* AF_INET */ u_shortsin_port; /* port number */ struct in_addr sin_addr /*net&host address(32 bits)*/ char sin_zero[8]; /*not used */ } struct in_addr { union { struct {u_char s_b1, s_b2, s_b3, s_b4;} S_un_b; struct {u_char s_w1, s_w2;} S_un_w; u_long S_addr; } S_un; #define s_addr S_un.S_addr /* used for most TCP&IP code */ } 12/16/2002 Sistemas Operativos 2001/2002 24

Sockets Criação - Tipo Tipo ou style Definido em <sys/sockets.h> SOCK_STREAM SOCK_DGRAM SOCL_RAW SOCK_RMD (Reliable Datagram) SOCK_SQPACKET (Sequence packet Stream) Cada um suportado por diferentes protocolos 12/16/2002 Sistemas Operativos 2001/2002 25

Sockets Criação - Tipo SOCK_DGRAM Modelo de comunicação connectionless Mensagens independentes (sem relação de ordem e normalmente pequenas) designadas por datagrams. São enviadas pela camada de transporte para um dado endereço. Podem-se perder, aparecer duplicadas ou fora de ordem Usa o protocolo UDP da camada de transporte Sock = socket ( AF_INET, SOCK_DGRAM, 0 ) 12/16/2002 Sistemas Operativos 2001/2002 26

Sockets Criação - Tipo SOCK_STREAM Serviço fiável e orientado à conecção (connection oriented) Informação transmitida em full-duplex e controlo de fluxo Informação entregue ordenada, sem perdas, erros ou duplicação. Caso contrário, aborta a ligação e devolve erro É suportado pelo protocolo TCP Sock = socket ( AF_INET,SOCK_STREAM, 0 ) 12/16/2002 Sistemas Operativos 2001/2002 27

Sockets Criação - Protocolo UDP (User datagram protocol ) - suporta SOCK_DGRAM TCP (Transmission Control Protocol) - suporta SOCK_STREAM IP (Internet Protocol) Valores que podem ser usados: Se 0 assume o protocolo por omissão para a família e tipo de socket Caso contrário, usa os valores definidos em <netinet/in.h> 12/16/2002 Sistemas Operativos 2001/2002 28

Sockets Estabelecer ligação Stream sockets Tem de estabelecer ligação antes de transferir dados Um socket pode ser activo ou passivo. Após criação é activo. Fica passivo depois de chamar Listen() e accept(). Só sockets activos podem ser usados no system call connect(). Só sockets passivos podem ser usados em accept() Estabelecem ligação via connect() 12/16/2002 Sistemas Operativos 2001/2002 29

Sockets Estabelecer ligação Stream sockets Quando o socket é criado, não tem endereço É preciso ligar (Bind ) o socket a um endereço O socket só tem nome quando lhe é explicitamente atribuido um endereço através do system call bind() Status = bind(sock, address, addrlen) Int status; /* 0 se sucesso, -1 caso contrário */ Int sock; /* descritor */ Struct addr * address; /*endereço de rede/máquina */ Int addrlen; /* dimensão (bytes) do endereço */ 12/16/2002 Sistemas Operativos 2001/2002 30

Sockets Estabelecer ligação Stream sockets status = listen( sock, queuelen) int sock, queuelen; new_socket = accept (old_sock, name, namelen) int new_sock,old_sock; /* socket descriptors */ struct sockaddr *name; /*peer socket on new conection */ int *namelen; /*length of name (bytes) */ Listen define um buffer de dimensão queuelen Accept pega na 1ª ligação pendente do buffer e retorna um novo ( e já ligado) socket O socket antigo mantêm-se e pode ser novamente usado Se não existir mais ligações pendentes, accept() bloqueia 12/16/2002 Sistemas Operativos 2001/2002 31

Sockets Estabelecer ligação DGRAM sockets Status = connect (sock, name, namelen ) Int sock; Struct sockaddr *namelen; Int namelen; Um socket activo liga-se a um socket passivo, através da função connect( ) Name é o endereço do socket remoto, de acordo com o domínio de comunicação definido na criação do socket 12/16/2002 Sistemas Operativos 2001/2002 32

Sockets Criação - Transferência de dados Usa os system Calls read / write - recvmsg / sendmsg recv / send - readv / writev recvfrom / sendto Podem ser todos usados para transferir dados através de sockets O mais apropriado, depende depende da funcionalidade: send /recv - tipicamente para SOCK_STREAM Sendto / recvform - tipicamente para SOCK_DGRAM Read / write - para qualquer socket já criado 12/16/2002 Sistemas Operativos 2001/2002 33

Sockets Terminar ligação System call close () status = close (sock) int status,sock; System call unlink () Só para AF_UNIX e depois de fechar o socket status = unlink (pathname) int status; char *pathname 12/16/2002 Sistemas Operativos 2001/2002 34

Comparação Servidores Ambos abrem socket e fazem bind com o endereço local Modelo orientado à conecção Servidor tem de fazer listen() e accept( ) Clientes Ambos devem abrir o socket Modelo orientado à conecção Tem de fazer connect() ao servidor Connectionless model Deve ligar (bind) socket e endereço local 12/16/2002 Sistemas Operativos 2001/2002 35

Cenário Estabelecer ligação orientada à connecção SERVER (Protocolo connection-orientes Socket( ) bind( ) listen( ) CLIENTE accept( ) Socket( ) Bloqueia até que haver ligação do cliente Connecção connect( ) read( ) pedido dados write( ) Processar pedido write( ) resposta read( ) 12/16/2002 Sistemas Operativos 2001/2002 36

Cenário Estabelecer ligação connetionless oriented SERVER (Connectionless protocol Socket( ) bind( ) CLIENTE recvfrom( ) Bloqueia até receber dados do cliente Socket( ) bind( ) pedido de dados sendto( ) Processar pedido sendto( ) resposta recvfrom( ) 12/16/2002 Sistemas Operativos 2001/2002 37

Exemplo Servidor #include<ctype.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet.h> #include<signal.h> #define SIZE sizeof (struct sockaddr_in); Void catchint(int sig); Int newsockfd; Main ( ) { int sockfd; char c; struct sockaddr_in sever=(af_inet,7000,inaddr_any); if ((sockfd=socket (AF_INET,SOCK_STREAM,0))==-1) { perror( Socket Call Failed\n ); exit(1); } 12/16/2002 Sistemas Operativos 2001/2002 38

Exemplo Servidor if bind(sockfd, (struct sockaddr *) &server,size)==-1) { perror( Bind Call Failed\n ); exit(1); } if(listen(sockfd,5)==-1) { perror( Listen Call Failed\n ); exit(1); } for(;;) { if ((newsockfd=accept(sockfd,null,null))== -1) { perror( Accept Call Failed\n ); } if (fork( )==0) { While (recv(newsockfd,&c,1,0) >0 ){ c=toupper(c); send(newsockfd,&c,1,0); } close(newsockfd); exit(0); } } 12/16/2002 Sistemas Operativos 2001/2002 39

Exemplo Cliente (...) Main ( ) { int sockfd; char c,rc; struct sockaddr_in server=(af_inet,7000); Server.sin_addr.s_addr=inet_addr( 197.45.10.2 ); if ((sockfd=socket (AF_INET,SOCK_STREAM,0))==-1) { perror( Socket Call Failed\n ); exit(1); } if(connect(sockfd, (struct sockaddr *) &server,size)==-1) { perror( Bind Call Failed\n ); exit(1); } 12/16/2002 Sistemas Operativos 2001/2002 40

Exemplo Cliente for (rc= \n ;;))) { if (rc== \n ) printf( Inserir letras minúsculas\n ); c=getchar( ); send((sockfd,&c,1,0); } if (recv(sockfd,&rc,1,0)>0) printf( %c,rc); else { printf( Servidor terminou a execução\n ); close(sockfd); exit(1); } } 12/16/2002 Sistemas Operativos 2001/2002 41