# Pseudo devices

Uma forma interessante de enviar mensagens para um socket *TCP* ou *UDP* quando não se tem um cliente como `netcat` ou `socat`, é utilizando os **pseudo-devices.**

Os pseudo-devices são criados no **filesystem** e localizados em `/dev`.

```bash
$ ls /dev
console  fd    mqueue  ptmx  random  stderr  stdout  urandom
core     full  null    pts   shm     stdin   tty     zero
```

Quando um TCP server é criado, podemos **enviar uma mensagem** a ele através de pseudo-devices, utilizando a mesma técnica de *redirecionamento de streams* que vimos com file descriptors e standard streams:

```bash
## Server
$ nc -lv 8080
Listening on 0.0.0.0 8080
```

O caminho padrão para um pseudo-device é:

> ```
> /dev/[protocol]/localhost/[port]
> ```

Então enviamos a mensagem sem a necessidade de `netcat`, apenas com **pseudo-devices**:

```bash
$ echo PING > /dev/tcp/localhost/8080
```

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

Note que assim que o server recebeu a mensagem, a **conexão com o cliente foi encerrada** e o processo do s**erver foi terminado**.

Se quisermos que o processo do server se mantenha em execução mesmo quando uma conexão de um cliente encerra, temos que indicar a opção `-k`:

```bash
$ nc -lvk 8080
```

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

Reforçando que, conforme exemplo acima, cada nova conexão é atribuída a uma porta de rede diferente, caracterizando a capacidade **full-duplex** do TCP entre diferentes clientes.


---

# 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/internet/pseudo-devices.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.
