Threads and Scheduling
at main 61 lines 1.5 kB view raw
1#include "enchufe.h" 2#include <unistd.h> // read, close and other POSIX functions 3#include <sys/socket.h> // all the socket functions 4#include <netinet/in.h> // sockaddr_in 5#include <arpa/inet.h> // inet_pton 6 7// Esta funcion llama a tres otras funciones inline. 8Enchufe enchufa(IPv4 ip, Port port) { 9 return aplasta(nuevo(), receptaculo(ip, port)); 10} 11 12// Wrapper para connect. 13void conecta(Enchufe enchufe) { 14 try (connect(enchufe.fd, (const struct sockaddr*)&enchufe.addr, enchufe.addrlen)); 15} 16 17// Wrapper para bind. 18void amarra(Enchufe enchufe) { 19 try (bind(enchufe.fd, (struct sockaddr*)&enchufe.addr, enchufe.addrlen)); 20} 21 22// Wrapper para liste. 23void escucha(Enchufe enchufe, size_t len) { 24 listen(enchufe.fd, (int)len); 25} 26 27// Wrapper para acepta. 28Enchufe acepta(Enchufe enchufe) { 29 FD fd = accept(enchufe.fd, (struct sockaddr*)&enchufe.addr, &enchufe.addrlen); 30 try (fd); 31 return (Enchufe){ 32 .fd = fd, 33 .addr = enchufe.addr, 34 .addrlen = enchufe.addrlen, 35 }; 36} 37 38// Wrapper para zumba. 39void zumba(Enchufe enchufe, Buffer buf) { 40 try (write(enchufe.fd, buf.buf, buf.len)); 41} 42 43// Wrapper para recibe. 44size_t recibe(Enchufe enchufe, Buffer buf) { 45 int64_t bytes_read = read(enchufe.fd, buf.buf, buf.len); 46 try (bytes_read); 47 return (size_t)bytes_read; 48} 49 50// Wrapper para close. 51void desenchufa(Enchufe enchufe) { 52 close(enchufe.fd); 53} 54 55// Esta funcion convierte un string a un buffer. 56Buffer atob(const char* str) { 57 return (Buffer){ 58 .buf = (Byte*)str, 59 .len = strlen(str), 60 }; 61}