# Stream sockets

Com **streams**, o socket tem a mesma funcionalidade que *datagrams*, mas com a diferença que uma **conexão é criada** entre o pipe do *client* e o pipe do *server*.&#x20;

Nesta conexão, é implementado um **conjunto de procedimentos** de pergunta-resposta para **garantir** que a mensagem é entregue em sua *totalidade e na ordem correta*.

Com isto, podemos dizer que stream sockets utilizam uma conexão, ao passo que datagram sockets não utilizam uma conexão.&#x20;

<figure><img src="/files/vw5mWXKo83Qx1ulPtluP" alt=""><figcaption></figcaption></figure>

Por padrão, o comando `nc` trabalha com sockets de **conexão**, portanto para criarmos um socket stream basta **removermos** a opção `-u`, opção esta que utilizamos para criar *datagram* sockets na última seção.

```bash
## Server
$ nc -Ulv server.sock
Bound on server.sock
Listening on server.sock
```

Note que agora, vemos uma mensagem "Listening on server.sock", que significa que o server está **à espera de novas conexões** no socket.&#x20;

Para criar o client, o processo é o mesmo, **não utilizando** a opção `-u`:

```bash
$ nc -Uv server.sock
```

<figure><img src="/files/nmPCRjriQqIk1NITOqix" alt=""><figcaption></figcaption></figure>

### Resumo

Até aqui, conseguimos entender **UNIX sockets** e a diferença entre *datagram* e *stream*.&#x20;

*So far so good*, mas os processos estão sempre no mesmo computador. Indo um pouco mais além, seria possível que **2 processos isolados em computadores distintos** se comunicassem?

Sim, caso os computadores estejam conectados na mesma **rede local** (LAN) ou em uma *rede global de computadores* (**Internet**).&#x20;

<figure><img src="/files/QnakdLXrPePNgbciqCHs" alt=""><figcaption></figcaption></figure>

Um UNIX socket por si só **não resolve IPC** entre 2 processos em computadores distintos conectados numa rede local ou global.

Vamos, então, explorar outras opções de IPC para processos em computadores distintos nas próximas seções deste guia.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://web101.leandronsp.com/comunicacao-entre-processos/unix-sockets/stream-sockets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
