Aps Parte 1
Os sockets de Berkeley constituem um mecanismo de comunicação entre processos (IPC) independente da sua localização, ao contrário dos mecanismos de IPC tradicionais (pipes, mensagens, sinais, memória partilhada, socketpairs, etc.) os quais exigem que os processos intervenientes se localizem na mesma máquina. Tipicamente, quando dois processos comunicam entre si com base no mecanismo de sockets de Berkeley, um desempenha o papel de cliente e outro o de servidor. Um servidor disponibiliza um determinado serviço e tem um modo de operação predominantemente passivo, aguardando que um ou mais clientes o contatem. A distinção servidor / cliente entre um par de processos não é rígida, uma vez que, em qualquer altura, podem reverter os seus papeis, caso pretendam efetuar uma troca de dados em sentido inverso. Um servidor iterativo atende um novo pedido apenas quando tiver satisfeito o pedido atual, ao passo que um servidor concorrente gera um processo filho para atender cada cliente específico, mantendo-se o pai permanentemente à escuta de novos pedidos. Muitas das primitivas sobre sockets aceitam como argumento um apontador para uma estrutura de endereço de socket; essa estrutura (em um sistema UNIX) encontra-se definida em <sys/socket.h> como: struct sockaddr { u_short sa_family; /* address family: AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; Mas indo ao que interessa: A primitiva socket cria um extremo de um canal de comunicação, retornando um descritor inteiro para o mesmo ou -1 (e alterando erro) em caso de erro. O parâmetro domain indica a família de protocolos a usar, podendo assumir, entre outros, os seguintes valores: -AF_UNIX (protocolos da família Unix); -AF_INET (protocolos da família Internet); O parâmetro type define a semântica da comunicação, podendo assumir, entre outros, os seguintes valores: -SOCK_STREAM: fornece uma conexão sequenciada e fiável através da qual pode fluir,