# enchufe Esto es una libreria de sockets escrita en C. Hasta ahora estas son las funciones que hay: ```c inline FD nuevo(); inline Receptaculo receptaculo(IPv4 ip, Port port); inline Enchufe aplasta(FD fd, Receptaculo rec); Enchufe enchufa(IPv4 ip, Port port); void conecta(Enchufe enchufe); void amarra(Enchufe enchufe); void escucha(Enchufe enchufe, size_t len); Enchufe acepta(Enchufe enchufe); void zumba(Enchufe enchufe, Buffer in_buf); void recibe(Enchufe enchufe, Buffer out_buf); void desenchufa(Enchufe enchufe); ``` --- Para muchas operaciones de esta libreria necesitaras un enchufe. Lo primero que tienes que hacer es adquirir un enchufe, para esto usa la funcion `enchufa`: ```c Enchufe enchufa(); ``` --- Hay veces donde solo vas a querer usar el "file descriptor" de un enchufe, o crear un enchufe sin receptaculo. Para esto tienes las funciones: ``` inline FD nuevo(); inline Receptaculo receptaculo(IPv4 ip, Port port); inline Enchufe aplasta(FD fd, Receptaculo rec); ``` Hacen exactamente lo que el prototipo dice que hacen. En este caso, la funcion `aplasta` coge el "file descriptor" y el Receptaculo que se le pasa y crea un enchufe con estos. Por eso, la implementacion de `enchufa` se ve asi: ```c Enchufe enchufa(IPv4 ip, Port port) { return aplasta(nuevo(), receptaculo(ip, port)); } ``` --- La funcion `amarra` toma el enchufe que se le pasa y amarra el "file descriptor" con el receptaculo del enchufe. Creando un socket con una direccion. ```c amarra(Enchufe enchufe); ``` --- Para hacer que un enchufe preste atencion a lo que se le conecta tendras que utilizar la funcion `escucha`: ```c void escucha(Enchufe enchufe, size_t len); ``` Esta fuuncion toma como parametros el enchufe que quires que se ponga a escuchar y la cantidad de conexiones que quieres que esperen. Este segundo parametro es importante porque si tienes demaisiadas conexiones es mejor decirle a les clientes que dejen de conectarse. Este numero le deja saber al programa cuan larga debe ser la cola de conexiones. --- Despues de poner una conexion a escuchar es importante atender a les clientes que intenten comunicarse por ese enchufe. Para eso, existe la funcion `acepta`: ```c Enchufe acepta(Enchufe enchufe); ``` Esta funcion devuelve el enchufe que se acaba de conectar. --- Para conectarte a un cliente: toma el enchufe, despues de amarralo con `amarra` y llama la funcion `conecta`: ```c void conecta(Enchufe enchufe); ``` Este creara la conexion. --- Para enviar o recibir data, puedes usar estas funciones ```c void zumba(Enchufe enchufe, Buffer buf); void recibe(Enchufe enchufe, Buffer buf); ``` --- Cuando termines de usar un enchufe, **DESCONECTALO** usando la funcion `desenchufa`: ```c void desenchufa(Enchufe enchufe); ```