Agora, o que é isso?
Um soquete ou "soquete" pode ter várias coisas:
Primeiro de tudo, é um modelo de pensamento e uma interface de programação de aplicativos (API) . Isso significa que você tem um conjunto de regras que você precisa seguir e um conjunto de funções que você pode usar para escrever programas que fazem algo, de acordo com um contrato especificado com precisão. Neste caso particular, algo significa trocar dados com outro programa.
A API de soquetes abstrai amplamente os detalhes de "comunicação" em geral. Ele encapsula com quem você fala e como, tudo através de uma forma (quase) consistente e idêntica de cortador de biscoitos.
Você pode criar soquetes em diferentes "domínios" (como, por exemplo, um "soquete unix" ou um "soquete de internet") e de diferentes tipos de comunicação (por exemplo, um soquete "datagrama" ou um soquete "stream") e conversar com diferentes destinatários e tudo funciona exatamente da mesma forma (bem, 99%, obviamente existem diferenças mínimas que você terá que explicar).
Você não precisa saber (e nem mesmo quer saber!) se você fala com outro programa no mesmo computador ou em outro computador, ou se há rede IPv4 ou IPv6 entre esses computadores ou talvez algum outro protocolo que você nunca ouviu falar.
socket
é também o nome da função de biblioteca (ou syscall) que cria "o socket ", que é um tipo especial de arquivo (tudo no Unix é um arquivo).
Como se compara a ...
sockets fall into the same category as pipes and name pipes
Um canal é um meio de comunicação unidirecional entre um leitor e um gravador (ambos sendo programas) no mesmo computador. Ele simula um fluxo de dados (assim como, por exemplo, TCP).
Ou seja, não existem "mensagens" ou "blocos de dados" individuais do ponto de vista do pipe. Você pode copiar qualquer quantidade de dados em "uma extremidade", e outra pessoa pode ler qualquer quantidade de dados (não necessariamente o mesmo, e não necessariamente de uma só vez) na "outra extremidade" na mesma ordem de bytes que você empurrou isto.
Um canal named é, simplesmente, um pipe que possui um nome no sistema de arquivos . Isto é, é algo que se parece e se comporta como um arquivo, aparece na lista de diretórios e você pode abri-lo, escrever nele, etc. etc. Note que você também pode criar arquivos especiais de socket (que seria um socket nomeado) .
Um socket, por outro lado, é um meio de comunicação bidireccional ("duplex"), o que significa que pode escrever e ler a partir do mesmo socket e não precisa de dois soquetes separados para uma comunicação bidirecional.
Além disso, um soquete pode atuar como um fluxo (idêntico a um pipe), ou pode enviar mensagens discretas e não confiáveis, ou enviar mensagens ordenadas discretas (os dois primeiros funcionam em qualquer domínio, o último somente em "domínio unix"). ). Pode enviar mensagens (ou simular um fluxo) para alguém em um computador totalmente diferente. Um socket pode até fazer uma forma de comunicação um-para-muitos (multicast) sob algumas condições.
Com isso em mente, é claro que os sockets fazem algo muito mais complicado e geralmente tem mais overhead do que pipes (que são basicamente não mais do que um simples memcpy
para e de um buffer! ), mas se você criar soquetes locais (ou seja, no mesmo computador), o sistema operacional geralmente aplica um caminho rápido altamente otimizado, portanto, não há muita diferença.
inter-process communication
sometimes mentioned with regard to networks
Sim, os soquetes são uma maneira possível de comunicação entre processos (memória compartilhada e pipes sendo exemplos de alternativas). Tudo ao mesmo tempo, eles estão sendo usados para "networking", como explicado acima.