Librería para enchufes en C.
at main 52 lines 1.2 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 7Enchufe enchufa(IPv4 ip, Port port) { 8 return aplasta(nuevo(), receptaculo(ip, port)); 9} 10 11void conecta(Enchufe enchufe) { 12 try (connect(enchufe.fd, (const struct sockaddr*)&enchufe.addr, enchufe.addrlen)); 13} 14 15void amarra(Enchufe enchufe) { 16 try (bind(enchufe.fd, (struct sockaddr*)&enchufe.addr, enchufe.addrlen)); 17} 18 19void escucha(Enchufe enchufe, size_t len) { 20 listen(enchufe.fd, len); 21} 22 23Enchufe acepta(Enchufe enchufe) { 24 FD fd = accept(enchufe.fd, (struct sockaddr*)&enchufe.addr, &enchufe.addrlen); 25 try (fd); 26 return (Enchufe){ 27 .fd = fd, 28 .addr = enchufe.addr, 29 .addrlen = enchufe.addrlen, 30 }; 31} 32 33void zumba(Enchufe enchufe, Buffer buf) { 34 try (write(enchufe.fd, buf.buf, buf.len)); 35} 36 37size_t recibe(Enchufe enchufe, Buffer buf) { 38 int bytes_read = read(enchufe.fd, buf.buf, buf.len); 39 try (bytes_read); 40 return bytes_read; 41} 42 43void desenchufa(Enchufe enchufe) { 44 close(enchufe.fd); 45} 46 47Buffer atob(const char* str) { 48 return (Buffer){ 49 .buf = (Byte*)str, 50 .len = strlen(str), 51 }; 52}