···11+# enchufe
22+33+Esto es una libreria de sockets escrita en C.
44+55+Hasta ahora estas son las funciones que hay:
66+```c
77+inline FD nuevo();
88+inline Receptaculo receptaculo(IPv4 ip, Port port);
99+inline Enchufe aplasta(FD fd, Receptaculo rec);
1010+1111+Enchufe enchufa(IPv4 ip, Port port);
1212+void conecta(Enchufe enchufe);
1313+void amarra(Enchufe enchufe);
1414+void escucha(Enchufe enchufe, size_t len);
1515+Enchufe acepta(Enchufe enchufe);
1616+void zumba(Enchufe enchufe, Buffer in_buf);
1717+void recibe(Enchufe enchufe, Buffer out_buf);
1818+void desenchufa(Enchufe enchufe);
1919+```
2020+2121+---
2222+2323+Para muchas operaciones de esta libreria necesitaras un enchufe. Lo primero que
2424+tienes que hacer es adquirir un enchufe, para esto usa la funcion `enchufa`:
2525+2626+```c
2727+Enchufe enchufa();
2828+```
2929+3030+---
3131+3232+Hay veces donde solo vas a querer usar el "file descriptor" de un enchufe, o
3333+crear un enchufe sin receptaculo. Para esto tienes las funciones:
3434+```
3535+inline FD nuevo();
3636+inline Receptaculo receptaculo(IPv4 ip, Port port);
3737+inline Enchufe aplasta(FD fd, Receptaculo rec);
3838+```
3939+4040+Hacen exactamente lo que el prototipo dice que hacen. En este caso, la funcion
4141+`aplasta` coge el "file descriptor" y el Receptaculo que se le pasa y crea un
4242+enchufe con estos. Por eso, la implementacion de `enchufa` se ve asi:
4343+4444+```c
4545+Enchufe enchufa(IPv4 ip, Port port) {
4646+ return aplasta(nuevo(), receptaculo(ip, port));
4747+}
4848+```
4949+5050+---
5151+5252+La funcion `amarra` toma el enchufe que se le pasa y amarra el "file descriptor"
5353+con el receptaculo del enchufe. Creando un socket con una direccion.
5454+5555+```c
5656+amarra(Enchufe enchufe);
5757+```
5858+5959+---
6060+6161+Para hacer que un enchufe preste atencion a lo que se le conecta tendras que
6262+utilizar la funcion `escucha`:
6363+6464+```c
6565+void escucha(Enchufe enchufe, size_t len);
6666+```
6767+6868+Esta fuuncion toma como parametros el enchufe que quires que se ponga a escuchar
6969+y la cantidad de conexiones que quieres que esperen. Este segundo parametro es
7070+importante porque si tienes demaisiadas conexiones es mejor decirle a les
7171+clientes que dejen de conectarse. Este numero le deja saber al programa cuan
7272+larga debe ser la cola de conexiones.
7373+7474+---
7575+7676+Despues de poner una conexion a escuchar es importante atender a les clientes
7777+que intenten comunicarse por ese enchufe. Para eso, existe la funcion `acepta`:
7878+7979+```c
8080+Enchufe acepta(Enchufe enchufe);
8181+```
8282+8383+Esta funcion devuelve el enchufe que se acaba de conectar.
8484+8585+---
8686+8787+Para conectarte a un cliente: toma el enchufe, despues de amarralo con `amarra`
8888+y llama la funcion `conecta`:
8989+9090+```c
9191+void conecta(Enchufe enchufe);
9292+```
9393+9494+Este creara la conexion.
9595+9696+---
9797+9898+Para enviar o recibir data, puedes usar estas funciones
9999+100100+```c
101101+void zumba(Enchufe enchufe, Buffer buf);
102102+void recibe(Enchufe enchufe, Buffer buf);
103103+```
104104+105105+---
106106+107107+Cuando termines de usar un enchufe, **DESCONECTALO** usando la funcion
108108+`desenchufa`:
109109+110110+```c
111111+void desenchufa(Enchufe enchufe);
112112+```