Librería para enchufes en C.
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}